Updated DB2 structs
This commit is contained in:
@@ -157,6 +157,7 @@ namespace Framework.Constants
|
||||
//CRITERIA_ADDITIONAL_CONDITION_UNK86 = 86, // Some external event id
|
||||
//CRITERIA_ADDITIONAL_CONDITION_UNK87 = 87, // Achievement id
|
||||
BattlePetSpecies = 91,
|
||||
Expansion = 92,
|
||||
GarrisonFollowerEntry = 144,
|
||||
GarrisonFollowerQuality = 145,
|
||||
GarrisonFollowerLevel = 146,
|
||||
@@ -403,7 +404,7 @@ namespace Framework.Constants
|
||||
GainParagonReputation = 206,
|
||||
EarnHonorXp = 207,
|
||||
RelicTalentUnlocked = 211,
|
||||
TotalTypes = 212
|
||||
TotalTypes = 213
|
||||
}
|
||||
|
||||
public enum CriteriaDataType
|
||||
|
||||
@@ -849,7 +849,7 @@ namespace Framework.Constants
|
||||
FlyWarriorChargeEnd = 821
|
||||
}
|
||||
|
||||
public enum AreaFlags
|
||||
public enum AreaFlags : int
|
||||
{
|
||||
Snow = 0x01, // Snow (Only Dun Morogh, Naxxramas, Razorfen Downs And Winterspring)
|
||||
Unk1 = 0x02, // Razorfen Downs, Naxxramas And Acherus: The Ebon Hold (3.3.5a)
|
||||
@@ -1232,7 +1232,7 @@ namespace Framework.Constants
|
||||
Prime = 2
|
||||
}
|
||||
|
||||
public enum ItemSetFlags
|
||||
public enum ItemSetFlags : byte
|
||||
{
|
||||
LegacyInactive = 0x01,
|
||||
}
|
||||
|
||||
@@ -343,7 +343,8 @@ namespace Framework.Constants
|
||||
ItemLevelCanIncrease = 14, // Displays a + next to item level indicating it can warforge
|
||||
RandomEnchantment = 15, // Responsible for showing "<Random additional stats>" or "+%d Rank Random Minor Trait" in the tooltip before item is obtained
|
||||
Bounding = 16,
|
||||
RelicType = 17
|
||||
RelicType = 17,
|
||||
OverrideRequiredLevel = 18
|
||||
}
|
||||
|
||||
public enum ItemEnchantmentType : byte
|
||||
|
||||
@@ -131,7 +131,7 @@ namespace Framework.Constants
|
||||
// uses this category
|
||||
}
|
||||
|
||||
public enum SummonType
|
||||
public enum SummonType: byte
|
||||
{
|
||||
None = 0,
|
||||
Pet = 1,
|
||||
|
||||
@@ -44,7 +44,7 @@ namespace Framework.Constants
|
||||
public const uint infinityCooldownDelayCheck = Time.Month / 2;
|
||||
public const int MaxPlayerSummonDelay = 2 * Time.Minute;
|
||||
|
||||
public const int TaxiMaskSize = 253;
|
||||
public const int TaxiMaskSize = 258;
|
||||
|
||||
// corpse reclaim times
|
||||
public const int DeathExpireStep = (5 * Time.Minute);
|
||||
|
||||
@@ -505,14 +505,19 @@ namespace Framework.Constants
|
||||
PandarenNeutral = 24,
|
||||
PandarenAlliance = 25,
|
||||
PandarenHorde = 26,
|
||||
Max = 27,
|
||||
Nightborne = 27,
|
||||
HighmountainTauren = 28,
|
||||
VoidElf = 29,
|
||||
LightforgedDraenei = 30,
|
||||
Max = 31,
|
||||
|
||||
RaceMaskAllPlayable = ((1 << (Human - 1)) | (1 << (Orc - 1)) | (1 << (Dwarf - 1)) | (1 << (NightElf - 1)) | (1 << (Undead - 1))
|
||||
| (1 << (Tauren - 1)) | (1 << (Gnome - 1)) | (1 << (Troll - 1)) | (1 << (BloodElf - 1)) | (1 << (Draenei - 1))
|
||||
| (1 << (Goblin - 1)) | (1 << (Worgen - 1)) | (1 << (PandarenNeutral - 1)) | (1 << (PandarenAlliance - 1)) | (1 << (PandarenHorde - 1))),
|
||||
| (1 << (Goblin - 1)) | (1 << (Worgen - 1)) | (1 << (PandarenNeutral - 1)) | (1 << (PandarenAlliance - 1)) | (1 << (PandarenHorde - 1))
|
||||
| (1 << (Nightborne - 1)) | (1 << (HighmountainTauren - 1)) | (1 << (VoidElf - 1)) | (1 << (LightforgedDraenei - 1))),
|
||||
|
||||
RaceMaskAlliance = ((1 << (Human - 1)) | (1 << (Dwarf - 1)) | (1 << (NightElf - 1)) |
|
||||
(1 << (Gnome - 1)) | (1 << (Draenei - 1)) | (1 << (Worgen - 1)) | (1 << (PandarenAlliance - 1))),
|
||||
RaceMaskAlliance = ((1 << (Human - 1)) | (1 << (Dwarf - 1)) | (1 << (NightElf - 1)) | (1 << (Gnome - 1))
|
||||
| (1 << (Draenei - 1)) | (1 << (Worgen - 1)) | (1 << (PandarenAlliance - 1)) | (1 << (VoidElf - 1)) | (1<<(LightforgedDraenei - 1))),
|
||||
|
||||
RaceMaskHorde = RaceMaskAllPlayable & ~RaceMaskAlliance
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,94 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2018 CypherCore <http://github.com/CypherCore>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Reflection.Emit;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Framework.IO
|
||||
{
|
||||
public static class FastStruct<T> where T : struct
|
||||
{
|
||||
private delegate T LoadFromByteRefDelegate(ref byte source);
|
||||
private delegate void CopyMemoryDelegate(ref T dest, ref byte src, int count);
|
||||
|
||||
private readonly static LoadFromByteRefDelegate LoadFromByteRef = BuildLoadFromByteRefMethod();
|
||||
private readonly static CopyMemoryDelegate CopyMemory = BuildCopyMemoryMethod();
|
||||
|
||||
public static readonly int Size = Marshal.SizeOf<T>();
|
||||
|
||||
private static LoadFromByteRefDelegate BuildLoadFromByteRefMethod()
|
||||
{
|
||||
var methodLoadFromByteRef = new DynamicMethod("LoadFromByteRef<" + typeof(T).FullName + ">",
|
||||
typeof(T), new[] { typeof(byte).MakeByRefType() }, typeof(FastStruct<T>));
|
||||
|
||||
ILGenerator generator = methodLoadFromByteRef.GetILGenerator();
|
||||
generator.Emit(OpCodes.Ldarg_0);
|
||||
generator.Emit(OpCodes.Ldobj, typeof(T));
|
||||
generator.Emit(OpCodes.Ret);
|
||||
|
||||
return (LoadFromByteRefDelegate)methodLoadFromByteRef.CreateDelegate(typeof(LoadFromByteRefDelegate));
|
||||
}
|
||||
|
||||
private static CopyMemoryDelegate BuildCopyMemoryMethod()
|
||||
{
|
||||
var methodCopyMemory = new DynamicMethod("CopyMemory<" + typeof(T).FullName + ">",
|
||||
typeof(void), new[] { typeof(T).MakeByRefType(), typeof(byte).MakeByRefType(), typeof(int) }, typeof(FastStruct<T>));
|
||||
|
||||
ILGenerator generator = methodCopyMemory.GetILGenerator();
|
||||
generator.Emit(OpCodes.Ldarg_0);
|
||||
generator.Emit(OpCodes.Ldarg_1);
|
||||
generator.Emit(OpCodes.Ldarg_2);
|
||||
generator.Emit(OpCodes.Cpblk);
|
||||
generator.Emit(OpCodes.Ret);
|
||||
|
||||
return (CopyMemoryDelegate)methodCopyMemory.CreateDelegate(typeof(CopyMemoryDelegate));
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static T ArrayToStructure(byte[] src)
|
||||
{
|
||||
return LoadFromByteRef(ref src[0]);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static T ArrayToStructure(byte[] src, int offset)
|
||||
{
|
||||
return LoadFromByteRef(ref src[offset]);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static T ArrayToStructure(ref byte src)
|
||||
{
|
||||
return LoadFromByteRef(ref src);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static T[] ReadArray(byte[] source)
|
||||
{
|
||||
T[] buffer = new T[source.Length / Size];
|
||||
|
||||
if (source.Length > 0)
|
||||
CopyMemory(ref buffer[0], ref source[0], source.Length);
|
||||
|
||||
return buffer;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -25,6 +25,7 @@ using System.Reflection.Emit;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using Framework.IO;
|
||||
|
||||
namespace System
|
||||
{
|
||||
@@ -201,26 +202,6 @@ namespace System
|
||||
return (Action<object, object>)setterMethod.CreateDelegate(typeof(Action<object, object>));
|
||||
}
|
||||
|
||||
public static Func<T, object> GetGetter<T>(this FieldInfo fieldInfo)
|
||||
{
|
||||
var paramExpression = Expression.Parameter(typeof(T));
|
||||
var propertyExpression = Expression.Field(paramExpression, fieldInfo);
|
||||
var convertExpression = Expression.TypeAs(propertyExpression, typeof(object));
|
||||
|
||||
return Expression.Lambda<Func<T, object>>(convertExpression, paramExpression).Compile();
|
||||
}
|
||||
|
||||
public static Action<T, object> GetSetter<T>(this FieldInfo fieldInfo)
|
||||
{
|
||||
var paramExpression = Expression.Parameter(typeof(T));
|
||||
var propertyExpression = Expression.Field(paramExpression, fieldInfo);
|
||||
var valueExpression = Expression.Parameter(typeof(object));
|
||||
var convertExpression = Expression.Convert(valueExpression, fieldInfo.FieldType);
|
||||
var assignExpression = Expression.Assign(propertyExpression, convertExpression);
|
||||
|
||||
return Expression.Lambda<Action<T, object>>(assignExpression, paramExpression, valueExpression).Compile();
|
||||
}
|
||||
|
||||
public static uint[] SerializeObject<T>(this T obj)
|
||||
{
|
||||
//if (obj.GetType()<StructLayoutAttribute>() == null)
|
||||
@@ -370,6 +351,97 @@ namespace System
|
||||
return data;
|
||||
|
||||
}
|
||||
|
||||
public static T[] ReadArray<T>(this BinaryReader reader, int size) where T : struct
|
||||
{
|
||||
int numBytes = FastStruct<T>.Size * size;
|
||||
|
||||
byte[] result = reader.ReadBytes(numBytes);
|
||||
|
||||
return FastStruct<T>.ReadArray(result);
|
||||
}
|
||||
|
||||
public static T Read<T>(this BinaryReader reader) where T : struct
|
||||
{
|
||||
byte[] result = reader.ReadBytes(FastStruct<T>.Size);
|
||||
|
||||
return FastStruct<T>.ArrayToStructure(result);
|
||||
}
|
||||
|
||||
public static T Read<T>(this BinaryReader reader, int byteCount) where T : struct
|
||||
{
|
||||
byte[] result = reader.ReadBytes(byteCount == 0 ? FastStruct<T>.Size : byteCount);
|
||||
|
||||
return FastStruct<T>.ArrayToStructure(result);
|
||||
}
|
||||
|
||||
public static int ReadInt32(this BinaryReader br, int byteCount = 0)
|
||||
{
|
||||
if (byteCount == 0)
|
||||
return br.ReadInt32();
|
||||
|
||||
if (byteCount != 4)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
byte[] b = new byte[sizeof(int)];
|
||||
for (int i = 0; i < byteCount; i++)
|
||||
b[i] = br.ReadByte();
|
||||
|
||||
return BitConverter.ToInt32(b, 0);
|
||||
}
|
||||
|
||||
public static uint ReadUInt32(this BinaryReader br, int byteCount = 0)
|
||||
{
|
||||
if (byteCount == 0)
|
||||
return br.ReadUInt32();
|
||||
|
||||
if (byteCount != 4)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
byte[] b = new byte[sizeof(uint)];
|
||||
for (int i = 0; i < byteCount; i++)
|
||||
b[i] = br.ReadByte();
|
||||
|
||||
return BitConverter.ToUInt32(b, 0);
|
||||
}
|
||||
|
||||
public static long ReadInt64(this BinaryReader br, int byteCount = 0)
|
||||
{
|
||||
if (byteCount == 0)
|
||||
return br.ReadInt64();
|
||||
|
||||
if (byteCount != 8)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
byte[] b = new byte[sizeof(long)];
|
||||
for (int i = 0; i < byteCount; i++)
|
||||
b[i] = br.ReadByte();
|
||||
|
||||
return BitConverter.ToInt64(b, 0);
|
||||
}
|
||||
|
||||
public static ulong ReadUInt64(this BinaryReader br, int byteCount = 0)
|
||||
{
|
||||
if (byteCount == 0)
|
||||
return br.ReadUInt64();
|
||||
|
||||
if (byteCount != 8)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
byte[] b = new byte[sizeof(ulong)];
|
||||
for (int i = 0; i < byteCount; i++)
|
||||
b[i] = br.ReadByte();
|
||||
|
||||
return BitConverter.ToUInt64(b, 0);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -273,8 +273,8 @@ namespace Game.Collision
|
||||
|
||||
public bool readFromFile(BinaryReader reader)
|
||||
{
|
||||
var lo = reader.ReadStruct<Vector3>();
|
||||
var hi = reader.ReadStruct<Vector3>();
|
||||
var lo = reader.Read<Vector3>();
|
||||
var hi = reader.Read<Vector3>();
|
||||
bounds = new AxisAlignedBox(lo, hi);
|
||||
|
||||
uint treeSize = reader.ReadUInt32();
|
||||
|
||||
@@ -173,8 +173,8 @@ namespace Game.Collision
|
||||
displayId = reader.ReadUInt32();
|
||||
name_length = reader.ReadUInt32();
|
||||
name = reader.ReadString((int)name_length);
|
||||
v1 = reader.ReadStruct<Vector3>();
|
||||
v2 = reader.ReadStruct<Vector3>();
|
||||
v1 = reader.Read<Vector3>();
|
||||
v2 = reader.Read<Vector3>();
|
||||
|
||||
StaticModelList.models.Add(displayId, new GameobjectModelData(name, new AxisAlignedBox(v1, v2)));
|
||||
}
|
||||
|
||||
@@ -50,15 +50,15 @@ namespace Game.Collision
|
||||
spawn.flags = reader.ReadUInt32();
|
||||
spawn.adtId = reader.ReadUInt16();
|
||||
spawn.ID = reader.ReadUInt32();
|
||||
spawn.iPos = reader.ReadStruct<Vector3>();
|
||||
spawn.iRot = reader.ReadStruct<Vector3>();
|
||||
spawn.iPos = reader.Read<Vector3>();
|
||||
spawn.iRot = reader.Read<Vector3>();
|
||||
spawn.iScale = reader.ReadSingle();
|
||||
|
||||
bool has_bound = Convert.ToBoolean(spawn.flags & (uint)ModelFlags.HasBound);
|
||||
if (has_bound) // only WMOs have bound in MPQ, only available after computation
|
||||
{
|
||||
Vector3 bLow = reader.ReadStruct<Vector3>();
|
||||
Vector3 bHigh = reader.ReadStruct<Vector3>();
|
||||
Vector3 bLow = reader.Read<Vector3>();
|
||||
Vector3 bHigh = reader.Read<Vector3>();
|
||||
spawn.iBound = new AxisAlignedBox(bLow, bHigh);
|
||||
}
|
||||
uint nameLen = reader.ReadUInt32();
|
||||
|
||||
@@ -139,7 +139,7 @@ namespace Game.Collision
|
||||
|
||||
liquid.iTilesX = reader.ReadUInt32();
|
||||
liquid.iTilesY = reader.ReadUInt32();
|
||||
liquid.iCorner = reader.ReadStruct<Vector3>();
|
||||
liquid.iCorner = reader.Read<Vector3>();
|
||||
liquid.iType = reader.ReadUInt32();
|
||||
|
||||
uint size = (liquid.iTilesX + 1) * (liquid.iTilesY + 1);
|
||||
@@ -222,7 +222,7 @@ namespace Game.Collision
|
||||
return false;
|
||||
|
||||
for (var i = 0; i < count; ++i)
|
||||
vertices.Add(reader.ReadStruct<Vector3>());
|
||||
vertices.Add(reader.Read<Vector3>());
|
||||
|
||||
// read triangle mesh
|
||||
if (reader.ReadStringFromChars(4) != "TRIM")
|
||||
|
||||
@@ -1675,7 +1675,7 @@ namespace Game
|
||||
if (condition.MaxLevel != 0 && player.getLevel() > condition.MaxLevel)
|
||||
return false;
|
||||
|
||||
if (condition.RaceMask != 0 && !Convert.ToBoolean(player.getRaceMask() & condition.RaceMask))
|
||||
if (condition.RaceMask != 0 && !Convert.ToBoolean((long)player.getRaceMask() & condition.RaceMask))
|
||||
return false;
|
||||
|
||||
if (condition.ClassMask != 0 && !Convert.ToBoolean(player.getClassMask() & condition.ClassMask))
|
||||
|
||||
+237
-232
@@ -35,230 +35,233 @@ namespace Game.DataStorage
|
||||
|
||||
DataPath = dataPath + "/dbc/" + defaultLocale + "/";
|
||||
|
||||
AchievementStorage = DB6Reader.Read<AchievementRecord>("Achievement.db2", DB6Metas.AchievementMeta, HotfixStatements.SEL_ACHIEVEMENT, HotfixStatements.SEL_ACHIEVEMENT_LOCALE);
|
||||
AnimKitStorage = DB6Reader.Read<AnimKitRecord>("AnimKit.db2", DB6Metas.AnimKitMeta, HotfixStatements.SEL_ANIM_KIT);
|
||||
AreaGroupMemberStorage = DB6Reader.Read<AreaGroupMemberRecord>("AreaGroupMember.db2", DB6Metas.AreaGroupMemberMeta, HotfixStatements.SEL_AREA_GROUP_MEMBER);
|
||||
AreaTableStorage = DB6Reader.Read<AreaTableRecord>("AreaTable.db2", DB6Metas.AreaTableMeta, HotfixStatements.SEL_AREA_TABLE, HotfixStatements.SEL_AREA_TABLE_LOCALE);
|
||||
AreaTriggerStorage = DB6Reader.Read<AreaTriggerRecord>("AreaTrigger.db2", DB6Metas.AreaTriggerMeta, HotfixStatements.SEL_AREA_TRIGGER);
|
||||
ArmorLocationStorage = DB6Reader.Read<ArmorLocationRecord>("ArmorLocation.db2", DB6Metas.ArmorLocationMeta, HotfixStatements.SEL_ARMOR_LOCATION);
|
||||
ArtifactStorage = DB6Reader.Read<ArtifactRecord>("Artifact.db2", DB6Metas.ArtifactMeta, HotfixStatements.SEL_ARTIFACT, HotfixStatements.SEL_ARTIFACT_APPEARANCE_LOCALE);
|
||||
ArtifactAppearanceStorage = DB6Reader.Read<ArtifactAppearanceRecord>("ArtifactAppearance.db2", DB6Metas.ArtifactAppearanceMeta, HotfixStatements.SEL_ARTIFACT_APPEARANCE, HotfixStatements.SEL_ARTIFACT_APPEARANCE_LOCALE);
|
||||
ArtifactAppearanceSetStorage = DB6Reader.Read<ArtifactAppearanceSetRecord>("ArtifactAppearanceSet.db2", DB6Metas.ArtifactAppearanceSetMeta, HotfixStatements.SEL_ARTIFACT_APPEARANCE_SET, HotfixStatements.SEL_ARTIFACT_APPEARANCE_SET_LOCALE);
|
||||
ArtifactCategoryStorage = DB6Reader.Read<ArtifactCategoryRecord>("ArtifactCategory.db2", DB6Metas.ArtifactCategoryMeta, HotfixStatements.SEL_ARTIFACT_CATEGORY);
|
||||
ArtifactPowerStorage = DB6Reader.Read<ArtifactPowerRecord>("ArtifactPower.db2", DB6Metas.ArtifactPowerMeta, HotfixStatements.SEL_ARTIFACT_POWER);
|
||||
ArtifactPowerLinkStorage = DB6Reader.Read<ArtifactPowerLinkRecord>("ArtifactPowerLink.db2", DB6Metas.ArtifactPowerLinkMeta, HotfixStatements.SEL_ARTIFACT_POWER_LINK);
|
||||
ArtifactPowerPickerStorage = DB6Reader.Read<ArtifactPowerPickerRecord>("ArtifactPowerPicker.db2", DB6Metas.ArtifactPowerPickerMeta, HotfixStatements.SEL_ARTIFACT_POWER_PICKER);
|
||||
ArtifactPowerRankStorage = DB6Reader.Read<ArtifactPowerRankRecord>("ArtifactPowerRank.db2", DB6Metas.ArtifactPowerRankMeta, HotfixStatements.SEL_ARTIFACT_POWER_RANK);
|
||||
//ArtifactQuestXPStorage = DB6Reader.Read<ArtifactQuestXPRecord>("ArtifactQuestXP.db2", DB6Metas.ArtifactQuestXPMeta, HotfixStatements.SEL_ARTIFACT_QUEST_XP);
|
||||
AuctionHouseStorage = DB6Reader.Read<AuctionHouseRecord>("AuctionHouse.db2", DB6Metas.AuctionHouseMeta, HotfixStatements.SEL_AUCTION_HOUSE, HotfixStatements.SEL_AUCTION_HOUSE_LOCALE);
|
||||
BankBagSlotPricesStorage = DB6Reader.Read<BankBagSlotPricesRecord>("BankBagSlotPrices.db2", DB6Metas.BankBagSlotPricesMeta, HotfixStatements.SEL_BANK_BAG_SLOT_PRICES);
|
||||
//BannedAddOnsStorage = DB6Reader.Read<BannedAddOnsRecord>("BannedAddons.db2", DB6Metas.BannedAddOnsMeta, HotfixStatements.SEL_BANNED_ADDONS);
|
||||
BarberShopStyleStorage = DB6Reader.Read<BarberShopStyleRecord>("BarberShopStyle.db2", DB6Metas.BarberShopStyleMeta, HotfixStatements.SEL_BARBER_SHOP_STYLE, HotfixStatements.SEL_BARBER_SHOP_STYLE_LOCALE);
|
||||
BattlePetBreedQualityStorage = DB6Reader.Read<BattlePetBreedQualityRecord>("BattlePetBreedQuality.db2", DB6Metas.BattlePetBreedQualityMeta, HotfixStatements.SEL_BATTLE_PET_BREED_QUALITY);
|
||||
BattlePetBreedStateStorage = DB6Reader.Read<BattlePetBreedStateRecord>("BattlePetBreedState.db2", DB6Metas.BattlePetBreedStateMeta, HotfixStatements.SEL_BATTLE_PET_BREED_STATE);
|
||||
BattlePetSpeciesStorage = DB6Reader.Read<BattlePetSpeciesRecord>("BattlePetSpecies.db2", DB6Metas.BattlePetSpeciesMeta, HotfixStatements.SEL_BATTLE_PET_SPECIES, HotfixStatements.SEL_BATTLE_PET_SPECIES_LOCALE);
|
||||
BattlePetSpeciesStateStorage = DB6Reader.Read<BattlePetSpeciesStateRecord>("BattlePetSpeciesState.db2", DB6Metas.BattlePetSpeciesStateMeta, HotfixStatements.SEL_BATTLE_PET_SPECIES_STATE);
|
||||
BattlemasterListStorage = DB6Reader.Read<BattlemasterListRecord>("BattlemasterList.db2", DB6Metas.BattlemasterListMeta, HotfixStatements.SEL_BATTLEMASTER_LIST, HotfixStatements.SEL_BATTLEMASTER_LIST_LOCALE);
|
||||
BroadcastTextStorage = DB6Reader.Read<BroadcastTextRecord>("BroadcastText.db2", DB6Metas.BroadcastTextMeta, HotfixStatements.SEL_BROADCAST_TEXT, HotfixStatements.SEL_BROADCAST_TEXT_LOCALE);
|
||||
CharacterFacialHairStylesStorage = DB6Reader.Read<CharacterFacialHairStylesRecord>("CharacterFacialHairStyles.db2", DB6Metas.CharacterFacialHairStylesMeta, HotfixStatements.SEL_CHARACTER_FACIAL_HAIR_STYLES);
|
||||
CharBaseSectionStorage = DB6Reader.Read<CharBaseSectionRecord>("CharBaseSection.db2", DB6Metas.CharBaseSectionMeta, HotfixStatements.SEL_CHAR_BASE_SECTION);
|
||||
CharSectionsStorage = DB6Reader.Read<CharSectionsRecord>("CharSections.db2", DB6Metas.CharSectionsMeta, HotfixStatements.SEL_CHAR_SECTIONS);
|
||||
CharStartOutfitStorage = DB6Reader.Read<CharStartOutfitRecord>("CharStartOutfit.db2", DB6Metas.CharStartOutfitMeta, HotfixStatements.SEL_CHAR_START_OUTFIT);
|
||||
CharTitlesStorage = DB6Reader.Read<CharTitlesRecord>("CharTitles.db2", DB6Metas.CharTitlesMeta, HotfixStatements.SEL_CHAR_TITLES, HotfixStatements.SEL_CHAR_TITLES_LOCALE);
|
||||
ChatChannelsStorage = DB6Reader.Read<ChatChannelsRecord>("ChatChannels.db2", DB6Metas.ChatChannelsMeta, HotfixStatements.SEL_CHAT_CHANNELS, HotfixStatements.SEL_CHAT_CHANNELS_LOCALE);
|
||||
ChrClassesStorage = DB6Reader.Read<ChrClassesRecord>("ChrClasses.db2", DB6Metas.ChrClassesMeta, HotfixStatements.SEL_CHR_CLASSES, HotfixStatements.SEL_CHR_CLASSES_LOCALE);
|
||||
ChrClassesXPowerTypesStorage = DB6Reader.Read<ChrClassesXPowerTypesRecord>("ChrClassesXPowerTypes.db2", DB6Metas.ChrClassesXPowerTypesMeta, HotfixStatements.SEL_CHR_CLASSES_X_POWER_TYPES);
|
||||
ChrRacesStorage = DB6Reader.Read<ChrRacesRecord>("ChrRaces.db2", DB6Metas.ChrRacesMeta, HotfixStatements.SEL_CHR_RACES, HotfixStatements.SEL_CHR_RACES_LOCALE);
|
||||
ChrSpecializationStorage = DB6Reader.Read<ChrSpecializationRecord>("ChrSpecialization.db2", DB6Metas.ChrSpecializationMeta, HotfixStatements.SEL_CHR_SPECIALIZATION, HotfixStatements.SEL_CHR_SPECIALIZATION_LOCALE);
|
||||
CinematicCameraStorage = DB6Reader.Read<CinematicCameraRecord>("CinematicCamera.db2", DB6Metas.CinematicCameraMeta, HotfixStatements.SEL_CINEMATIC_CAMERA);
|
||||
CinematicSequencesStorage = DB6Reader.Read<CinematicSequencesRecord>("CinematicSequences.db2", DB6Metas.CinematicSequencesMeta, HotfixStatements.SEL_CINEMATIC_SEQUENCES);
|
||||
ConversationLineStorage = DB6Reader.Read<ConversationLineRecord>("ConversationLine.db2", DB6Metas.ConversationLineMeta, HotfixStatements.SEL_CONVERSATION_LINE);
|
||||
CreatureDisplayInfoStorage = DB6Reader.Read<CreatureDisplayInfoRecord>("CreatureDisplayInfo.db2", DB6Metas.CreatureDisplayInfoMeta, HotfixStatements.SEL_CREATURE_DISPLAY_INFO);
|
||||
CreatureDisplayInfoExtraStorage = DB6Reader.Read<CreatureDisplayInfoExtraRecord>("CreatureDisplayInfoExtra.db2", DB6Metas.CreatureDisplayInfoExtraMeta, HotfixStatements.SEL_CREATURE_DISPLAY_INFO_EXTRA);
|
||||
CreatureFamilyStorage = DB6Reader.Read<CreatureFamilyRecord>("CreatureFamily.db2", DB6Metas.CreatureFamilyMeta, HotfixStatements.SEL_CREATURE_FAMILY, HotfixStatements.SEL_CREATURE_FAMILY_LOCALE);
|
||||
CreatureModelDataStorage = DB6Reader.Read<CreatureModelDataRecord>("CreatureModelData.db2", DB6Metas.CreatureModelDataMeta, HotfixStatements.SEL_CREATURE_MODEL_DATA);
|
||||
CreatureTypeStorage = DB6Reader.Read<CreatureTypeRecord>("CreatureType.db2", DB6Metas.CreatureTypeMeta, HotfixStatements.SEL_CREATURE_TYPE, HotfixStatements.SEL_CREATURE_TYPE_LOCALE);
|
||||
CriteriaStorage = DB6Reader.Read<CriteriaRecord>("Criteria.db2", DB6Metas.CriteriaMeta, HotfixStatements.SEL_CRITERIA);
|
||||
CriteriaTreeStorage = DB6Reader.Read<CriteriaTreeRecord>("CriteriaTree.db2", DB6Metas.CriteriaTreeMeta, HotfixStatements.SEL_CRITERIA_TREE, HotfixStatements.SEL_CRITERIA_TREE_LOCALE);
|
||||
CurrencyTypesStorage = DB6Reader.Read<CurrencyTypesRecord>("CurrencyTypes.db2", DB6Metas.CurrencyTypesMeta, HotfixStatements.SEL_CURRENCY_TYPES, HotfixStatements.SEL_CURRENCY_TYPES_LOCALE);
|
||||
CurveStorage = DB6Reader.Read<CurveRecord>("Curve.db2", DB6Metas.CurveMeta, HotfixStatements.SEL_CURVE);
|
||||
CurvePointStorage = DB6Reader.Read<CurvePointRecord>("CurvePoint.db2", DB6Metas.CurvePointMeta, HotfixStatements.SEL_CURVE_POINT);
|
||||
DestructibleModelDataStorage = DB6Reader.Read<DestructibleModelDataRecord>("DestructibleModelData.db2", DB6Metas.DestructibleModelDataMeta, HotfixStatements.SEL_DESTRUCTIBLE_MODEL_DATA);
|
||||
DifficultyStorage = DB6Reader.Read<DifficultyRecord>("Difficulty.db2", DB6Metas.DifficultyMeta, HotfixStatements.SEL_DIFFICULTY, HotfixStatements.SEL_DIFFICULTY_LOCALE);
|
||||
DungeonEncounterStorage = DB6Reader.Read<DungeonEncounterRecord>("DungeonEncounter.db2", DB6Metas.DungeonEncounterMeta, HotfixStatements.SEL_DUNGEON_ENCOUNTER, HotfixStatements.SEL_DUNGEON_ENCOUNTER_LOCALE);
|
||||
DurabilityCostsStorage = DB6Reader.Read<DurabilityCostsRecord>("DurabilityCosts.db2", DB6Metas.DurabilityCostsMeta, HotfixStatements.SEL_DURABILITY_COSTS);
|
||||
DurabilityQualityStorage = DB6Reader.Read<DurabilityQualityRecord>("DurabilityQuality.db2", DB6Metas.DurabilityQualityMeta, HotfixStatements.SEL_DURABILITY_QUALITY);
|
||||
EmotesStorage = DB6Reader.Read<EmotesRecord>("Emotes.db2", DB6Metas.EmotesMeta, HotfixStatements.SEL_EMOTES);
|
||||
EmotesTextStorage = DB6Reader.Read<EmotesTextRecord>("EmotesText.db2", DB6Metas.EmotesTextMeta, HotfixStatements.SEL_EMOTES_TEXT, HotfixStatements.SEL_EMOTES_TEXT_LOCALE);
|
||||
EmotesTextSoundStorage = DB6Reader.Read<EmotesTextSoundRecord>("EmotesTextSound.db2", DB6Metas.EmotesTextSoundMeta, HotfixStatements.SEL_EMOTES_TEXT_SOUND);
|
||||
FactionStorage = DB6Reader.Read<FactionRecord>("Faction.db2", DB6Metas.FactionMeta, HotfixStatements.SEL_FACTION, HotfixStatements.SEL_FACTION_LOCALE);
|
||||
FactionTemplateStorage = DB6Reader.Read<FactionTemplateRecord>("FactionTemplate.db2", DB6Metas.FactionTemplateMeta, HotfixStatements.SEL_FACTION_TEMPLATE);
|
||||
GameObjectsStorage = DB6Reader.Read<GameObjectsRecord>("GameObjects.db2", DB6Metas.GameObjectsMeta, HotfixStatements.SEL_GAMEOBJECTS, HotfixStatements.SEL_GAMEOBJECTS_LOCALE);
|
||||
GameObjectDisplayInfoStorage = DB6Reader.Read<GameObjectDisplayInfoRecord>("GameObjectDisplayInfo.db2", DB6Metas.GameObjectDisplayInfoMeta, HotfixStatements.SEL_GAMEOBJECT_DISPLAY_INFO);
|
||||
GarrAbilityStorage = DB6Reader.Read<GarrAbilityRecord>("GarrAbility.db2", DB6Metas.GarrAbilityMeta, HotfixStatements.SEL_GARR_ABILITY, HotfixStatements.SEL_GARR_ABILITY_LOCALE);
|
||||
GarrBuildingStorage = DB6Reader.Read<GarrBuildingRecord>("GarrBuilding.db2", DB6Metas.GarrBuildingMeta, HotfixStatements.SEL_GARR_BUILDING, HotfixStatements.SEL_GARR_BUILDING_LOCALE);
|
||||
GarrBuildingPlotInstStorage = DB6Reader.Read<GarrBuildingPlotInstRecord>("GarrBuildingPlotInst.db2", DB6Metas.GarrBuildingPlotInstMeta, HotfixStatements.SEL_GARR_BUILDING_PLOT_INST);
|
||||
GarrClassSpecStorage = DB6Reader.Read<GarrClassSpecRecord>("GarrClassSpec.db2", DB6Metas.GarrClassSpecMeta, HotfixStatements.SEL_GARR_CLASS_SPEC, HotfixStatements.SEL_GARR_CLASS_SPEC_LOCALE);
|
||||
GarrFollowerStorage = DB6Reader.Read<GarrFollowerRecord>("GarrFollower.db2", DB6Metas.GarrFollowerMeta, HotfixStatements.SEL_GARR_FOLLOWER, HotfixStatements.SEL_GARR_FOLLOWER_LOCALE);
|
||||
GarrFollowerXAbilityStorage = DB6Reader.Read<GarrFollowerXAbilityRecord>("GarrFollowerXAbility.db2", DB6Metas.GarrFollowerXAbilityMeta, HotfixStatements.SEL_GARR_FOLLOWER_X_ABILITY);
|
||||
GarrPlotBuildingStorage = DB6Reader.Read<GarrPlotBuildingRecord>("GarrPlotBuilding.db2", DB6Metas.GarrPlotBuildingMeta, HotfixStatements.SEL_GARR_PLOT_BUILDING);
|
||||
GarrPlotStorage = DB6Reader.Read<GarrPlotRecord>("GarrPlot.db2", DB6Metas.GarrPlotMeta, HotfixStatements.SEL_GARR_PLOT, HotfixStatements.SEL_GARR_PLOT_LOCALE);
|
||||
GarrPlotInstanceStorage = DB6Reader.Read<GarrPlotInstanceRecord>("GarrPlotInstance.db2", DB6Metas.GarrPlotInstanceMeta, HotfixStatements.SEL_GARR_PLOT_INSTANCE, HotfixStatements.SEL_GARR_PLOT_INSTANCE_LOCALE);
|
||||
GarrSiteLevelStorage = DB6Reader.Read<GarrSiteLevelRecord>("GarrSiteLevel.db2", DB6Metas.GarrSiteLevelMeta, HotfixStatements.SEL_GARR_SITE_LEVEL);
|
||||
GarrSiteLevelPlotInstStorage = DB6Reader.Read<GarrSiteLevelPlotInstRecord>("GarrSiteLevelPlotInst.db2", DB6Metas.GarrSiteLevelPlotInstMeta, HotfixStatements.SEL_GARR_SITE_LEVEL_PLOT_INST);
|
||||
GemPropertiesStorage = DB6Reader.Read<GemPropertiesRecord>("GemProperties.db2", DB6Metas.GemPropertiesMeta, HotfixStatements.SEL_GEM_PROPERTIES);
|
||||
GlyphBindableSpellStorage = DB6Reader.Read<GlyphBindableSpellRecord>("GlyphBindableSpell.db2", DB6Metas.GlyphBindableSpellMeta, HotfixStatements.SEL_GLYPH_BINDABLE_SPELL);
|
||||
GlyphPropertiesStorage = DB6Reader.Read<GlyphPropertiesRecord>("GlyphProperties.db2", DB6Metas.GlyphPropertiesMeta, HotfixStatements.SEL_GLYPH_PROPERTIES);
|
||||
GlyphRequiredSpecStorage = DB6Reader.Read<GlyphRequiredSpecRecord>("GlyphRequiredSpec.db2", DB6Metas.GlyphRequiredSpecMeta, HotfixStatements.SEL_GLYPH_REQUIRED_SPEC);
|
||||
GuildColorBackgroundStorage = DB6Reader.Read<GuildColorBackgroundRecord>("GuildColorBackground.db2", DB6Metas.GuildColorBackgroundMeta, HotfixStatements.SEL_GUILD_COLOR_BACKGROUND);
|
||||
GuildColorBorderStorage = DB6Reader.Read<GuildColorBorderRecord>("GuildColorBorder.db2", DB6Metas.GuildColorBorderMeta, HotfixStatements.SEL_GUILD_COLOR_BORDER);
|
||||
GuildColorEmblemStorage = DB6Reader.Read<GuildColorEmblemRecord>("GuildColorEmblem.db2", DB6Metas.GuildColorEmblemMeta, HotfixStatements.SEL_GUILD_COLOR_EMBLEM);
|
||||
GuildPerkSpellsStorage = DB6Reader.Read<GuildPerkSpellsRecord>("GuildPerkSpells.db2", DB6Metas.GuildPerkSpellsMeta, HotfixStatements.SEL_GUILD_PERK_SPELLS);
|
||||
HeirloomStorage = DB6Reader.Read<HeirloomRecord>("Heirloom.db2", DB6Metas.HeirloomMeta, HotfixStatements.SEL_HEIRLOOM, HotfixStatements.SEL_HEIRLOOM_LOCALE);
|
||||
HolidaysStorage = DB6Reader.Read<HolidaysRecord>("Holidays.db2", DB6Metas.HolidaysMeta, HotfixStatements.SEL_HOLIDAYS);
|
||||
ImportPriceArmorStorage = DB6Reader.Read<ImportPriceArmorRecord>("ImportPriceArmor.db2", DB6Metas.ImportPriceArmorMeta, HotfixStatements.SEL_IMPORT_PRICE_ARMOR);
|
||||
ImportPriceQualityStorage = DB6Reader.Read<ImportPriceQualityRecord>("ImportPriceQuality.db2", DB6Metas.ImportPriceQualityMeta, HotfixStatements.SEL_IMPORT_PRICE_QUALITY);
|
||||
ImportPriceShieldStorage = DB6Reader.Read<ImportPriceShieldRecord>("ImportPriceShield.db2", DB6Metas.ImportPriceShieldMeta, HotfixStatements.SEL_IMPORT_PRICE_SHIELD);
|
||||
ImportPriceWeaponStorage = DB6Reader.Read<ImportPriceWeaponRecord>("ImportPriceWeapon.db2", DB6Metas.ImportPriceWeaponMeta, HotfixStatements.SEL_IMPORT_PRICE_WEAPON);
|
||||
ItemAppearanceStorage = DB6Reader.Read<ItemAppearanceRecord>("ItemAppearance.db2", DB6Metas.ItemAppearanceMeta, HotfixStatements.SEL_ITEM_APPEARANCE);
|
||||
ItemArmorQualityStorage = DB6Reader.Read<ItemArmorQualityRecord>("ItemArmorQuality.db2", DB6Metas.ItemArmorQualityMeta, HotfixStatements.SEL_ITEM_ARMOR_QUALITY);
|
||||
ItemArmorShieldStorage = DB6Reader.Read<ItemArmorShieldRecord>("ItemArmorShield.db2", DB6Metas.ItemArmorShieldMeta, HotfixStatements.SEL_ITEM_ARMOR_SHIELD);
|
||||
ItemArmorTotalStorage = DB6Reader.Read<ItemArmorTotalRecord>("ItemArmorTotal.db2", DB6Metas.ItemArmorTotalMeta, HotfixStatements.SEL_ITEM_ARMOR_TOTAL);
|
||||
//ItemBagFamilyStorage = DB6Reader.Read<ItemBagFamilyRecord>("ItemBagFamily.db2", DB6Metas.ItemBagFamilyMeta, HotfixStatements.SEL_ITEM_BAG_FAMILY, HotfixStatements.SEL_ITEM_BAG_FAMILY_LOCALE);
|
||||
ItemBonusStorage = DB6Reader.Read<ItemBonusRecord>("ItemBonus.db2", DB6Metas.ItemBonusMeta, HotfixStatements.SEL_ITEM_BONUS);
|
||||
ItemBonusListLevelDeltaStorage = DB6Reader.Read<ItemBonusListLevelDeltaRecord>("ItemBonusListLevelDelta.db2", DB6Metas.ItemBonusListLevelDeltaMeta, HotfixStatements.SEL_ITEM_BONUS_LIST_LEVEL_DELTA);
|
||||
ItemBonusTreeNodeStorage = DB6Reader.Read<ItemBonusTreeNodeRecord>("ItemBonusTreeNode.db2", DB6Metas.ItemBonusTreeNodeMeta, HotfixStatements.SEL_ITEM_BONUS_TREE_NODE);
|
||||
ItemChildEquipmentStorage = DB6Reader.Read<ItemChildEquipmentRecord>("ItemChildEquipment.db2", DB6Metas.ItemChildEquipmentMeta, HotfixStatements.SEL_ITEM_CHILD_EQUIPMENT);
|
||||
ItemClassStorage = DB6Reader.Read<ItemClassRecord>("ItemClass.db2", DB6Metas.ItemClassMeta, HotfixStatements.SEL_ITEM_CLASS, HotfixStatements.SEL_ITEM_CLASS_LOCALE);
|
||||
ItemCurrencyCostStorage = DB6Reader.Read<ItemCurrencyCostRecord>("ItemCurrencyCost.db2", DB6Metas.ItemCurrencyCostMeta, HotfixStatements.SEL_ITEM_CURRENCY_COST);
|
||||
ItemDamageAmmoStorage = DB6Reader.Read<ItemDamageRecord>("ItemDamageAmmo.db2", DB6Metas.ItemDamageAmmoMeta, HotfixStatements.SEL_ITEM_DAMAGE_AMMO);
|
||||
ItemDamageOneHandStorage = DB6Reader.Read<ItemDamageRecord>("ItemDamageOneHand.db2", DB6Metas.ItemDamageOneHandMeta, HotfixStatements.SEL_ITEM_DAMAGE_ONE_HAND);
|
||||
ItemDamageOneHandCasterStorage = DB6Reader.Read<ItemDamageRecord>("ItemDamageOneHandCaster.db2", DB6Metas.ItemDamageOneHandCasterMeta, HotfixStatements.SEL_ITEM_DAMAGE_ONE_HAND_CASTER);
|
||||
ItemDamageTwoHandStorage = DB6Reader.Read<ItemDamageRecord>("ItemDamageTwoHand.db2", DB6Metas.ItemDamageTwoHandMeta, HotfixStatements.SEL_ITEM_DAMAGE_TWO_HAND);
|
||||
ItemDamageTwoHandCasterStorage = DB6Reader.Read<ItemDamageRecord>("ItemDamageTwoHandCaster.db2", DB6Metas.ItemDamageTwoHandCasterMeta, HotfixStatements.SEL_ITEM_DAMAGE_TWO_HAND_CASTER);
|
||||
ItemDisenchantLootStorage = DB6Reader.Read<ItemDisenchantLootRecord>("ItemDisenchantLoot.db2", DB6Metas.ItemDisenchantLootMeta, HotfixStatements.SEL_ITEM_DISENCHANT_LOOT);
|
||||
ItemEffectStorage = DB6Reader.Read<ItemEffectRecord>("ItemEffect.db2", DB6Metas.ItemEffectMeta, HotfixStatements.SEL_ITEM_EFFECT);
|
||||
ItemStorage = DB6Reader.Read<ItemRecord>("Item.db2", DB6Metas.ItemMeta, HotfixStatements.SEL_ITEM);
|
||||
ItemExtendedCostStorage = DB6Reader.Read<ItemExtendedCostRecord>("ItemExtendedCost.db2", DB6Metas.ItemExtendedCostMeta, HotfixStatements.SEL_ITEM_EXTENDED_COST);
|
||||
ItemLevelSelectorStorage = DB6Reader.Read<ItemLevelSelectorRecord>("ItemLevelSelector.db2", DB6Metas.ItemLevelSelectorMeta, HotfixStatements.SEL_ITEM_LEVEL_SELECTOR);
|
||||
ItemLevelSelectorQualityStorage = DB6Reader.Read<ItemLevelSelectorQualityRecord>("ItemLevelSelectorQuality.db2", DB6Metas.ItemLevelSelectorQualityMeta, HotfixStatements.SEL_ITEM_LEVEL_SELECTOR_QUALITY);
|
||||
ItemLevelSelectorQualitySetStorage = DB6Reader.Read<ItemLevelSelectorQualitySetRecord>("ItemLevelSelectorQualitySet.db2", DB6Metas.ItemLevelSelectorQualitySetMeta, HotfixStatements.SEL_ITEM_LEVEL_SELECTOR_QUALITY_SET);
|
||||
ItemLimitCategoryStorage = DB6Reader.Read<ItemLimitCategoryRecord>("ItemLimitCategory.db2", DB6Metas.ItemLimitCategoryMeta, HotfixStatements.SEL_ITEM_LIMIT_CATEGORY, HotfixStatements.SEL_ITEM_LIMIT_CATEGORY_LOCALE);
|
||||
ItemModifiedAppearanceStorage = DB6Reader.Read<ItemModifiedAppearanceRecord>("ItemModifiedAppearance.db2", DB6Metas.ItemModifiedAppearanceMeta, HotfixStatements.SEL_ITEM_MODIFIED_APPEARANCE);
|
||||
ItemPriceBaseStorage = DB6Reader.Read<ItemPriceBaseRecord>("ItemPriceBase.db2", DB6Metas.ItemPriceBaseMeta, HotfixStatements.SEL_ITEM_PRICE_BASE);
|
||||
ItemRandomPropertiesStorage = DB6Reader.Read<ItemRandomPropertiesRecord>("ItemRandomProperties.db2", DB6Metas.ItemRandomPropertiesMeta, HotfixStatements.SEL_ITEM_RANDOM_PROPERTIES, HotfixStatements.SEL_ITEM_RANDOM_PROPERTIES_LOCALE);
|
||||
ItemRandomSuffixStorage = DB6Reader.Read<ItemRandomSuffixRecord>("ItemRandomSuffix.db2", DB6Metas.ItemRandomSuffixMeta, HotfixStatements.SEL_ITEM_RANDOM_SUFFIX, HotfixStatements.SEL_ITEM_RANDOM_SUFFIX_LOCALE);
|
||||
ItemSearchNameStorage = DB6Reader.Read<ItemSearchNameRecord>("ItemSearchName.db2", DB6Metas.ItemSearchNameMeta, HotfixStatements.SEL_ITEM_SEARCH_NAME, HotfixStatements.SEL_ITEM_SEARCH_NAME_LOCALE);
|
||||
ItemSetStorage = DB6Reader.Read<ItemSetRecord>("ItemSet.db2", DB6Metas.ItemSetMeta, HotfixStatements.SEL_ITEM_SET, HotfixStatements.SEL_ITEM_SET_LOCALE);
|
||||
ItemSetSpellStorage = DB6Reader.Read<ItemSetSpellRecord>("ItemSetSpell.db2", DB6Metas.ItemSetSpellMeta, HotfixStatements.SEL_ITEM_SET_SPELL);
|
||||
ItemSparseStorage = DB6Reader.Read<ItemSparseRecord>("ItemSparse.db2", DB6Metas.ItemSparseMeta, HotfixStatements.SEL_ITEM_SPARSE, HotfixStatements.SEL_ITEM_SPARSE_LOCALE);
|
||||
ItemSpecStorage = DB6Reader.Read<ItemSpecRecord>("ItemSpec.db2", DB6Metas.ItemSpecMeta, HotfixStatements.SEL_ITEM_SPEC);
|
||||
ItemSpecOverrideStorage = DB6Reader.Read<ItemSpecOverrideRecord>("ItemSpecOverride.db2", DB6Metas.ItemSpecOverrideMeta, HotfixStatements.SEL_ITEM_SPEC_OVERRIDE);
|
||||
ItemUpgradeStorage = DB6Reader.Read<ItemUpgradeRecord>("ItemUpgrade.db2", DB6Metas.ItemUpgradeMeta, HotfixStatements.SEL_ITEM_UPGRADE);
|
||||
ItemXBonusTreeStorage = DB6Reader.Read<ItemXBonusTreeRecord>("ItemXBonusTree.db2", DB6Metas.ItemXBonusTreeMeta, HotfixStatements.SEL_ITEM_X_BONUS_TREE);
|
||||
//KeyChainStorage = DB6Reader.Read<KeyChainRecord>("KeyChain.db2", DB6Metas.KeyChainMeta, HotfixStatements.SEL_KEY_CHAIN);
|
||||
LFGDungeonsStorage = DB6Reader.Read<LFGDungeonsRecord>("LFGDungeons.db2", DB6Metas.LFGDungeonsMeta, HotfixStatements.SEL_LFG_DUNGEONS, HotfixStatements.SEL_LFG_DUNGEONS_LOCALE);
|
||||
LightStorage = DB6Reader.Read<LightRecord>("Light.db2", DB6Metas.LightMeta, HotfixStatements.SEL_LIGHT);
|
||||
LiquidTypeStorage = DB6Reader.Read<LiquidTypeRecord>("LiquidType.db2", DB6Metas.LiquidTypeMeta, HotfixStatements.SEL_LIQUID_TYPE, HotfixStatements.SEL_LIQUID_TYPE_LOCALE);
|
||||
LockStorage = DB6Reader.Read<LockRecord>("Lock.db2", DB6Metas.LockMeta, HotfixStatements.SEL_LOCK);
|
||||
MailTemplateStorage = DB6Reader.Read<MailTemplateRecord>("MailTemplate.db2", DB6Metas.MailTemplateMeta, HotfixStatements.SEL_MAIL_TEMPLATE, HotfixStatements.SEL_MAIL_TEMPLATE_LOCALE);
|
||||
MapStorage = DB6Reader.Read<MapRecord>("Map.db2", DB6Metas.MapMeta, HotfixStatements.SEL_MAP, HotfixStatements.SEL_MAP_LOCALE);
|
||||
MapDifficultyStorage = DB6Reader.Read<MapDifficultyRecord>("MapDifficulty.db2", DB6Metas.MapDifficultyMeta, HotfixStatements.SEL_MAP_DIFFICULTY, HotfixStatements.SEL_MAP_DIFFICULTY_LOCALE);
|
||||
ModifierTreeStorage = DB6Reader.Read<ModifierTreeRecord>("ModifierTree.db2", DB6Metas.ModifierTreeMeta, HotfixStatements.SEL_MODIFIER_TREE);
|
||||
MountCapabilityStorage = DB6Reader.Read<MountCapabilityRecord>("MountCapability.db2", DB6Metas.MountCapabilityMeta, HotfixStatements.SEL_MOUNT_CAPABILITY);
|
||||
MountStorage = DB6Reader.Read<MountRecord>("Mount.db2", DB6Metas.MountMeta, HotfixStatements.SEL_MOUNT, HotfixStatements.SEL_MOUNT_LOCALE);
|
||||
MountTypeXCapabilityStorage = DB6Reader.Read<MountTypeXCapabilityRecord>("MountTypeXCapability.db2", DB6Metas.MountTypeXCapabilityMeta, HotfixStatements.SEL_MOUNT_TYPE_X_CAPABILITY);
|
||||
MountXDisplayStorage = DB6Reader.Read<MountXDisplayRecord>("MountXDisplay.db2", DB6Metas.MountXDisplayMeta, HotfixStatements.SEL_MOUNT_X_DISPLAY);
|
||||
MovieStorage = DB6Reader.Read<MovieRecord>("Movie.db2", DB6Metas.MovieMeta, HotfixStatements.SEL_MOVIE);
|
||||
NameGenStorage = DB6Reader.Read<NameGenRecord>("NameGen.db2", DB6Metas.NameGenMeta, HotfixStatements.SEL_NAME_GEN, HotfixStatements.SEL_NAME_GEN_LOCALE);
|
||||
NamesProfanityStorage = DB6Reader.Read<NamesProfanityRecord>("NamesProfanity.db2", DB6Metas.NamesProfanityMeta, HotfixStatements.SEL_NAMES_PROFANITY);
|
||||
NamesReservedStorage = DB6Reader.Read<NamesReservedRecord>("NamesReserved.db2", DB6Metas.NamesReservedMeta, HotfixStatements.SEL_NAMES_RESERVED, HotfixStatements.SEL_NAMES_RESERVED_LOCALE);
|
||||
NamesReservedLocaleStorage = DB6Reader.Read<NamesReservedLocaleRecord>("NamesReservedLocale.db2", DB6Metas.NamesReservedLocaleMeta, HotfixStatements.SEL_NAMES_RESERVED_LOCALE);
|
||||
OverrideSpellDataStorage = DB6Reader.Read<OverrideSpellDataRecord>("OverrideSpellData.db2", DB6Metas.OverrideSpellDataMeta, HotfixStatements.SEL_OVERRIDE_SPELL_DATA);
|
||||
PhaseStorage = DB6Reader.Read<PhaseRecord>("Phase.db2", DB6Metas.PhaseMeta, HotfixStatements.SEL_PHASE);
|
||||
PhaseXPhaseGroupStorage = DB6Reader.Read<PhaseXPhaseGroupRecord>("PhaseXPhaseGroup.db2", DB6Metas.PhaseXPhaseGroupMeta, HotfixStatements.SEL_PHASE_X_PHASE_GROUP);
|
||||
PlayerConditionStorage = DB6Reader.Read<PlayerConditionRecord>("PlayerCondition.db2", DB6Metas.PlayerConditionMeta, HotfixStatements.SEL_PLAYER_CONDITION, HotfixStatements.SEL_PLAYER_CONDITION_LOCALE);
|
||||
PowerDisplayStorage = DB6Reader.Read<PowerDisplayRecord>("PowerDisplay.db2", DB6Metas.PowerDisplayMeta, HotfixStatements.SEL_POWER_DISPLAY);
|
||||
PowerTypeStorage = DB6Reader.Read<PowerTypeRecord>("PowerType.db2", DB6Metas.PowerTypeMeta, HotfixStatements.SEL_POWER_TYPE);
|
||||
PrestigeLevelInfoStorage = DB6Reader.Read<PrestigeLevelInfoRecord>("PrestigeLevelInfo.db2", DB6Metas.PrestigeLevelInfoMeta, HotfixStatements.SEL_PRESTIGE_LEVEL_INFO, HotfixStatements.SEL_PRESTIGE_LEVEL_INFO_LOCALE);
|
||||
PVPDifficultyStorage = DB6Reader.Read<PVPDifficultyRecord>("PVPDifficulty.db2", DB6Metas.PvpDifficultyMeta, HotfixStatements.SEL_PVP_DIFFICULTY);
|
||||
PvpRewardStorage = DB6Reader.Read<PvpRewardRecord>("PvpReward.db2", DB6Metas.PvpRewardMeta, HotfixStatements.SEL_PVP_REWARD);
|
||||
QuestFactionRewardStorage = DB6Reader.Read<QuestFactionRewardRecord>("QuestFactionReward.db2", DB6Metas.QuestFactionRewardMeta, HotfixStatements.SEL_QUEST_FACTION_REWARD);
|
||||
QuestMoneyRewardStorage = DB6Reader.Read<QuestMoneyRewardRecord>("QuestMoneyReward.db2", DB6Metas.QuestMoneyRewardMeta, HotfixStatements.SEL_QUEST_MONEY_REWARD);
|
||||
QuestPackageItemStorage = DB6Reader.Read<QuestPackageItemRecord>("QuestPackageItem.db2", DB6Metas.QuestPackageItemMeta, HotfixStatements.SEL_QUEST_PACKAGE_ITEM);
|
||||
QuestSortStorage = DB6Reader.Read<QuestSortRecord>("QuestSort.db2", DB6Metas.QuestSortMeta, HotfixStatements.SEL_QUEST_SORT, HotfixStatements.SEL_QUEST_SORT_LOCALE);
|
||||
QuestV2Storage = DB6Reader.Read<QuestV2Record>("QuestV2.db2", DB6Metas.QuestV2Meta, HotfixStatements.SEL_QUEST_V2);
|
||||
QuestXPStorage = DB6Reader.Read<QuestXPRecord>("QuestXP.db2", DB6Metas.QuestXPMeta, HotfixStatements.SEL_QUEST_XP);
|
||||
RandPropPointsStorage = DB6Reader.Read<RandPropPointsRecord>("RandPropPoints.db2", DB6Metas.RandPropPointsMeta, HotfixStatements.SEL_RAND_PROP_POINTS);
|
||||
RewardPackStorage = DB6Reader.Read<RewardPackRecord>("RewardPack.db2", DB6Metas.RewardPackMeta, HotfixStatements.SEL_REWARD_PACK);
|
||||
RewardPackXItemStorage = DB6Reader.Read<RewardPackXItemRecord>("RewardPackXItem.db2", DB6Metas.RewardPackXItemMeta, HotfixStatements.SEL_REWARD_PACK_X_ITEM);
|
||||
RulesetItemUpgradeStorage = DB6Reader.Read<RulesetItemUpgradeRecord>("RulesetItemUpgrade.db2", DB6Metas.RulesetItemUpgradeMeta, HotfixStatements.SEL_RULESET_ITEM_UPGRADE);
|
||||
ScalingStatDistributionStorage = DB6Reader.Read<ScalingStatDistributionRecord>("ScalingStatDistribution.db2", DB6Metas.ScalingStatDistributionMeta, HotfixStatements.SEL_SCALING_STAT_DISTRIBUTION);
|
||||
ScenarioStorage = DB6Reader.Read<ScenarioRecord>("Scenario.db2", DB6Metas.ScenarioMeta, HotfixStatements.SEL_SCENARIO, HotfixStatements.SEL_SCENARIO_LOCALE);
|
||||
ScenarioStepStorage = DB6Reader.Read<ScenarioStepRecord>("ScenarioStep.db2", DB6Metas.ScenarioStepMeta, HotfixStatements.SEL_SCENARIO_STEP, HotfixStatements.SEL_SCENARIO_STEP_LOCALE);
|
||||
//SceneScriptStorage = DB6Reader.Read<SceneScriptRecord>("SceneScript.db2", DB6Metas.SceneScriptMeta, HotfixStatements.SEL_SCENE_SCRIPT);
|
||||
SceneScriptPackageStorage = DB6Reader.Read<SceneScriptPackageRecord>("SceneScriptPackage.db2", DB6Metas.SceneScriptPackageMeta, HotfixStatements.SEL_SCENE_SCRIPT_PACKAGE);
|
||||
SkillLineStorage = DB6Reader.Read<SkillLineRecord>("SkillLine.db2", DB6Metas.SkillLineMeta, HotfixStatements.SEL_SKILL_LINE, HotfixStatements.SEL_SKILL_LINE_LOCALE);
|
||||
SkillLineAbilityStorage = DB6Reader.Read<SkillLineAbilityRecord>("SkillLineAbility.db2", DB6Metas.SkillLineAbilityMeta, HotfixStatements.SEL_SKILL_LINE_ABILITY);
|
||||
SkillRaceClassInfoStorage = DB6Reader.Read<SkillRaceClassInfoRecord>("SkillRaceClassInfo.db2", DB6Metas.SkillRaceClassInfoMeta, HotfixStatements.SEL_SKILL_RACE_CLASS_INFO);
|
||||
SoundKitStorage = DB6Reader.Read<SoundKitRecord>("SoundKit.db2", DB6Metas.SoundKitMeta, HotfixStatements.SEL_SOUND_KIT);
|
||||
SpecializationSpellsStorage = DB6Reader.Read<SpecializationSpellsRecord>("SpecializationSpells.db2", DB6Metas.SpecializationSpellsMeta, HotfixStatements.SEL_SPECIALIZATION_SPELLS, HotfixStatements.SEL_SPECIALIZATION_SPELLS_LOCALE);
|
||||
SpellStorage = DB6Reader.Read<SpellRecord>("Spell.db2", DB6Metas.SpellMeta, HotfixStatements.SEL_SPELL, HotfixStatements.SEL_SPELL_LOCALE);
|
||||
SpellAuraOptionsStorage = DB6Reader.Read<SpellAuraOptionsRecord>("SpellAuraOptions.db2", DB6Metas.SpellAuraOptionsMeta, HotfixStatements.SEL_SPELL_AURA_OPTIONS);
|
||||
SpellAuraRestrictionsStorage = DB6Reader.Read<SpellAuraRestrictionsRecord>("SpellAuraRestrictions.db2", DB6Metas.SpellAuraRestrictionsMeta, HotfixStatements.SEL_SPELL_AURA_RESTRICTIONS);
|
||||
SpellCastTimesStorage = DB6Reader.Read<SpellCastTimesRecord>("SpellCastTimes.db2", DB6Metas.SpellCastTimesMeta, HotfixStatements.SEL_SPELL_CAST_TIMES);
|
||||
SpellCastingRequirementsStorage = DB6Reader.Read<SpellCastingRequirementsRecord>("SpellCastingRequirements.db2", DB6Metas.SpellCastingRequirementsMeta, HotfixStatements.SEL_SPELL_CASTING_REQUIREMENTS);
|
||||
SpellCategoriesStorage = DB6Reader.Read<SpellCategoriesRecord>("SpellCategories.db2", DB6Metas.SpellCategoriesMeta, HotfixStatements.SEL_SPELL_CATEGORIES);
|
||||
SpellCategoryStorage = DB6Reader.Read<SpellCategoryRecord>("SpellCategory.db2", DB6Metas.SpellCategoryMeta, HotfixStatements.SEL_SPELL_CATEGORY, HotfixStatements.SEL_SPELL_CATEGORY_LOCALE);
|
||||
SpellClassOptionsStorage = DB6Reader.Read<SpellClassOptionsRecord>("SpellClassOptions.db2", DB6Metas.SpellClassOptionsMeta, HotfixStatements.SEL_SPELL_CLASS_OPTIONS);
|
||||
SpellCooldownsStorage = DB6Reader.Read<SpellCooldownsRecord>("SpellCooldowns.db2", DB6Metas.SpellCooldownsMeta, HotfixStatements.SEL_SPELL_COOLDOWNS);
|
||||
SpellDurationStorage = DB6Reader.Read<SpellDurationRecord>("SpellDuration.db2", DB6Metas.SpellDurationMeta, HotfixStatements.SEL_SPELL_DURATION);
|
||||
SpellEffectStorage = DB6Reader.Read<SpellEffectRecord>("SpellEffect.db2", DB6Metas.SpellEffectMeta, HotfixStatements.SEL_SPELL_EFFECT);
|
||||
SpellEffectScalingStorage = DB6Reader.Read<SpellEffectScalingRecord>("SpellEffectScaling.db2", DB6Metas.SpellEffectScalingMeta, HotfixStatements.SEL_SPELL_EFFECT_SCALING);
|
||||
SpellEquippedItemsStorage = DB6Reader.Read<SpellEquippedItemsRecord>("SpellEquippedItems.db2", DB6Metas.SpellEquippedItemsMeta, HotfixStatements.SEL_SPELL_EQUIPPED_ITEMS);
|
||||
SpellFocusObjectStorage = DB6Reader.Read<SpellFocusObjectRecord>("SpellFocusObject.db2", DB6Metas.SpellFocusObjectMeta, HotfixStatements.SEL_SPELL_FOCUS_OBJECT, HotfixStatements.SEL_SPELL_FOCUS_OBJECT_LOCALE);
|
||||
SpellInterruptsStorage = DB6Reader.Read<SpellInterruptsRecord>("SpellInterrupts.db2", DB6Metas.SpellInterruptsMeta, HotfixStatements.SEL_SPELL_INTERRUPTS);
|
||||
SpellItemEnchantmentStorage = DB6Reader.Read<SpellItemEnchantmentRecord>("SpellItemEnchantment.db2", DB6Metas.SpellItemEnchantmentMeta, HotfixStatements.SEL_SPELL_ITEM_ENCHANTMENT, HotfixStatements.SEL_SPELL_ITEM_ENCHANTMENT_LOCALE);
|
||||
SpellItemEnchantmentConditionStorage = DB6Reader.Read<SpellItemEnchantmentConditionRecord>("SpellItemEnchantmentCondition.db2", DB6Metas.SpellItemEnchantmentConditionMeta, HotfixStatements.SEL_SPELL_ITEM_ENCHANTMENT_CONDITION);
|
||||
SpellLearnSpellStorage = DB6Reader.Read<SpellLearnSpellRecord>("SpellLearnSpell.db2", DB6Metas.SpellLearnSpellMeta, HotfixStatements.SEL_SPELL_LEARN_SPELL);
|
||||
SpellLevelsStorage = DB6Reader.Read<SpellLevelsRecord>("SpellLevels.db2", DB6Metas.SpellLevelsMeta, HotfixStatements.SEL_SPELL_LEVELS);
|
||||
SpellMiscStorage = DB6Reader.Read<SpellMiscRecord>("SpellMisc.db2", DB6Metas.SpellMiscMeta, HotfixStatements.SEL_SPELL_MISC);
|
||||
SpellPowerStorage = DB6Reader.Read<SpellPowerRecord>("SpellPower.db2", DB6Metas.SpellPowerMeta, HotfixStatements.SEL_SPELL_POWER);
|
||||
SpellPowerDifficultyStorage = DB6Reader.Read<SpellPowerDifficultyRecord>("SpellPowerDifficulty.db2", DB6Metas.SpellPowerDifficultyMeta, HotfixStatements.SEL_SPELL_POWER_DIFFICULTY);
|
||||
SpellProcsPerMinuteStorage = DB6Reader.Read<SpellProcsPerMinuteRecord>("SpellProcsPerMinute.db2", DB6Metas.SpellProcsPerMinuteMeta, HotfixStatements.SEL_SPELL_PROCS_PER_MINUTE);
|
||||
SpellProcsPerMinuteModStorage = DB6Reader.Read<SpellProcsPerMinuteModRecord>("SpellProcsPerMinuteMod.db2", DB6Metas.SpellProcsPerMinuteModMeta, HotfixStatements.SEL_SPELL_PROCS_PER_MINUTE_MOD);
|
||||
SpellRadiusStorage = DB6Reader.Read<SpellRadiusRecord>("SpellRadius.db2", DB6Metas.SpellRadiusMeta, HotfixStatements.SEL_SPELL_RADIUS);
|
||||
SpellRangeStorage = DB6Reader.Read<SpellRangeRecord>("SpellRange.db2", DB6Metas.SpellRangeMeta, HotfixStatements.SEL_SPELL_RANGE, HotfixStatements.SEL_SPELL_RANGE_LOCALE);
|
||||
SpellReagentsStorage = DB6Reader.Read<SpellReagentsRecord>("SpellReagents.db2", DB6Metas.SpellReagentsMeta, HotfixStatements.SEL_SPELL_REAGENTS);
|
||||
SpellScalingStorage = DB6Reader.Read<SpellScalingRecord>("SpellScaling.db2", DB6Metas.SpellScalingMeta, HotfixStatements.SEL_SPELL_SCALING);
|
||||
SpellShapeshiftStorage = DB6Reader.Read<SpellShapeshiftRecord>("SpellShapeshift.db2", DB6Metas.SpellShapeshiftMeta, HotfixStatements.SEL_SPELL_SHAPESHIFT);
|
||||
SpellShapeshiftFormStorage = DB6Reader.Read<SpellShapeshiftFormRecord>("SpellShapeshiftForm.db2", DB6Metas.SpellShapeshiftFormMeta, HotfixStatements.SEL_SPELL_SHAPESHIFT_FORM, HotfixStatements.SEL_SPELL_SHAPESHIFT_FORM_LOCALE);
|
||||
SpellTargetRestrictionsStorage = DB6Reader.Read<SpellTargetRestrictionsRecord>("SpellTargetRestrictions.db2", DB6Metas.SpellTargetRestrictionsMeta, HotfixStatements.SEL_SPELL_TARGET_RESTRICTIONS);
|
||||
SpellTotemsStorage = DB6Reader.Read<SpellTotemsRecord>("SpellTotems.db2", DB6Metas.SpellTotemsMeta, HotfixStatements.SEL_SPELL_TOTEMS);
|
||||
SpellXSpellVisualStorage = DB6Reader.Read<SpellXSpellVisualRecord>("SpellXSpellVisual.db2", DB6Metas.SpellXSpellVisualMeta, HotfixStatements.SEL_SPELL_X_SPELL_VISUAL);
|
||||
SummonPropertiesStorage = DB6Reader.Read<SummonPropertiesRecord>("SummonProperties.db2", DB6Metas.SummonPropertiesMeta, HotfixStatements.SEL_SUMMON_PROPERTIES);
|
||||
//TactKeyStorage = DB6Reader.Read<TactKeyRecord>("TactKey.db2", DB6Metas.TactKeyMeta, HotfixStatements.SEL_TACT_KEY);
|
||||
TalentStorage = DB6Reader.Read<TalentRecord>("Talent.db2", DB6Metas.TalentMeta, HotfixStatements.SEL_TALENT, HotfixStatements.SEL_TALENT_LOCALE);
|
||||
TaxiNodesStorage = DB6Reader.Read<TaxiNodesRecord>("TaxiNodes.db2", DB6Metas.TaxiNodesMeta, HotfixStatements.SEL_TAXI_NODES, HotfixStatements.SEL_TAXI_NODES_LOCALE);
|
||||
TaxiPathStorage = DB6Reader.Read<TaxiPathRecord>("TaxiPath.db2", DB6Metas.TaxiPathMeta, HotfixStatements.SEL_TAXI_PATH);
|
||||
TaxiPathNodeStorage = DB6Reader.Read<TaxiPathNodeRecord>("TaxiPathNode.db2", DB6Metas.TaxiPathNodeMeta, HotfixStatements.SEL_TAXI_PATH_NODE);
|
||||
TotemCategoryStorage = DB6Reader.Read<TotemCategoryRecord>("TotemCategory.db2", DB6Metas.TotemCategoryMeta, HotfixStatements.SEL_TOTEM_CATEGORY, HotfixStatements.SEL_TOTEM_CATEGORY_LOCALE);
|
||||
ToyStorage = DB6Reader.Read<ToyRecord>("Toy.db2", DB6Metas.ToyMeta, HotfixStatements.SEL_TOY, HotfixStatements.SEL_TOY_LOCALE);
|
||||
TransmogHolidayStorage = DB6Reader.Read<TransmogHolidayRecord>("TransmogHoliday.db2", DB6Metas.TransmogHolidayMeta, HotfixStatements.SEL_TRANSMOG_HOLIDAY);
|
||||
TransmogSetStorage = DB6Reader.Read<TransmogSetRecord>("TransmogSet.db2", DB6Metas.TransmogSetMeta, HotfixStatements.SEL_TRANSMOG_SET, HotfixStatements.SEL_TRANSMOG_SET_LOCALE);
|
||||
TransmogSetGroupStorage = DB6Reader.Read<TransmogSetGroupRecord>("TransmogSetGroup.db2", DB6Metas.TransmogSetGroupMeta, HotfixStatements.SEL_TRANSMOG_SET_GROUP, HotfixStatements.SEL_TRANSMOG_SET_GROUP_LOCALE);
|
||||
TransmogSetItemStorage = DB6Reader.Read<TransmogSetItemRecord>("TransmogSetItem.db2", DB6Metas.TransmogSetItemMeta, HotfixStatements.SEL_TRANSMOG_SET_ITEM);
|
||||
TransportAnimationStorage = DB6Reader.Read<TransportAnimationRecord>("TransportAnimation.db2", DB6Metas.TransportAnimationMeta, HotfixStatements.SEL_TRANSPORT_ANIMATION);
|
||||
TransportRotationStorage = DB6Reader.Read<TransportRotationRecord>("TransportRotation.db2", DB6Metas.TransportRotationMeta, HotfixStatements.SEL_TRANSPORT_ROTATION);
|
||||
UnitPowerBarStorage = DB6Reader.Read<UnitPowerBarRecord>("UnitPowerBar.db2", DB6Metas.UnitPowerBarMeta, HotfixStatements.SEL_UNIT_POWER_BAR, HotfixStatements.SEL_UNIT_POWER_BAR_LOCALE);
|
||||
VehicleStorage = DB6Reader.Read<VehicleRecord>("Vehicle.db2", DB6Metas.VehicleMeta, HotfixStatements.SEL_VEHICLE);
|
||||
VehicleSeatStorage = DB6Reader.Read<VehicleSeatRecord>("VehicleSeat.db2", DB6Metas.VehicleSeatMeta, HotfixStatements.SEL_VEHICLE_SEAT);
|
||||
WMOAreaTableStorage = DB6Reader.Read<WMOAreaTableRecord>("WMOAreaTable.db2", DB6Metas.WMOAreaTableMeta, HotfixStatements.SEL_WMO_AREA_TABLE, HotfixStatements.SEL_WMO_AREA_TABLE_LOCALE);
|
||||
WorldEffectStorage = DB6Reader.Read<WorldEffectRecord>("WorldEffect.db2", DB6Metas.WorldEffectMeta, HotfixStatements.SEL_WORLD_EFFECT);
|
||||
WorldMapAreaStorage = DB6Reader.Read<WorldMapAreaRecord>("WorldMapArea.db2", DB6Metas.WorldMapAreaMeta, HotfixStatements.SEL_WORLD_MAP_AREA);
|
||||
WorldMapOverlayStorage = DB6Reader.Read<WorldMapOverlayRecord>("WorldMapOverlay.db2", DB6Metas.WorldMapOverlayMeta, HotfixStatements.SEL_WORLD_MAP_OVERLAY);
|
||||
WorldMapTransformsStorage = DB6Reader.Read<WorldMapTransformsRecord>("WorldMapTransforms.db2", DB6Metas.WorldMapTransformsMeta, HotfixStatements.SEL_WORLD_MAP_TRANSFORMS);
|
||||
WorldSafeLocsStorage = DB6Reader.Read<WorldSafeLocsRecord>("WorldSafeLocs.db2", DB6Metas.WorldSafeLocsMeta, HotfixStatements.SEL_WORLD_SAFE_LOCS, HotfixStatements.SEL_WORLD_SAFE_LOCS_LOCALE);
|
||||
AchievementStorage = DBReader.Read<AchievementRecord>("Achievement.db2", HotfixStatements.SEL_ACHIEVEMENT, HotfixStatements.SEL_ACHIEVEMENT_LOCALE);
|
||||
AnimKitStorage = DBReader.Read<AnimKitRecord>("AnimKit.db2", HotfixStatements.SEL_ANIM_KIT);
|
||||
AreaGroupMemberStorage = DBReader.Read<AreaGroupMemberRecord>("AreaGroupMember.db2", HotfixStatements.SEL_AREA_GROUP_MEMBER);
|
||||
AreaTableStorage = DBReader.Read<AreaTableRecord>("AreaTable.db2", HotfixStatements.SEL_AREA_TABLE, HotfixStatements.SEL_AREA_TABLE_LOCALE);
|
||||
AreaTriggerStorage = DBReader.Read<AreaTriggerRecord>("AreaTrigger.db2", HotfixStatements.SEL_AREA_TRIGGER);
|
||||
ArmorLocationStorage = DBReader.Read<ArmorLocationRecord>("ArmorLocation.db2", HotfixStatements.SEL_ARMOR_LOCATION);
|
||||
ArtifactStorage = DBReader.Read<ArtifactRecord>("Artifact.db2", HotfixStatements.SEL_ARTIFACT, HotfixStatements.SEL_ARTIFACT_APPEARANCE_LOCALE);
|
||||
ArtifactAppearanceStorage = DBReader.Read<ArtifactAppearanceRecord>("ArtifactAppearance.db2", HotfixStatements.SEL_ARTIFACT_APPEARANCE, HotfixStatements.SEL_ARTIFACT_APPEARANCE_LOCALE);
|
||||
ArtifactAppearanceSetStorage = DBReader.Read<ArtifactAppearanceSetRecord>("ArtifactAppearanceSet.db2", HotfixStatements.SEL_ARTIFACT_APPEARANCE_SET, HotfixStatements.SEL_ARTIFACT_APPEARANCE_SET_LOCALE);
|
||||
ArtifactCategoryStorage = DBReader.Read<ArtifactCategoryRecord>("ArtifactCategory.db2", HotfixStatements.SEL_ARTIFACT_CATEGORY);
|
||||
ArtifactPowerStorage = DBReader.Read<ArtifactPowerRecord>("ArtifactPower.db2", HotfixStatements.SEL_ARTIFACT_POWER);
|
||||
ArtifactPowerLinkStorage = DBReader.Read<ArtifactPowerLinkRecord>("ArtifactPowerLink.db2", HotfixStatements.SEL_ARTIFACT_POWER_LINK);
|
||||
ArtifactPowerPickerStorage = DBReader.Read<ArtifactPowerPickerRecord>("ArtifactPowerPicker.db2", HotfixStatements.SEL_ARTIFACT_POWER_PICKER);
|
||||
ArtifactPowerRankStorage = DBReader.Read<ArtifactPowerRankRecord>("ArtifactPowerRank.db2", HotfixStatements.SEL_ARTIFACT_POWER_RANK);
|
||||
//ArtifactQuestXPStorage = DBReader.Read<ArtifactQuestXPRecord>("ArtifactQuestXP.db2", HotfixStatements.SEL_ARTIFACT_QUEST_XP);
|
||||
AuctionHouseStorage = DBReader.Read<AuctionHouseRecord>("AuctionHouse.db2", HotfixStatements.SEL_AUCTION_HOUSE, HotfixStatements.SEL_AUCTION_HOUSE_LOCALE);
|
||||
BankBagSlotPricesStorage = DBReader.Read<BankBagSlotPricesRecord>("BankBagSlotPrices.db2", HotfixStatements.SEL_BANK_BAG_SLOT_PRICES);
|
||||
//BannedAddOnsStorage = DBReader.Read<BannedAddOnsRecord>("BannedAddons.db2", HotfixStatements.SEL_BANNED_ADDONS);
|
||||
BarberShopStyleStorage = DBReader.Read<BarberShopStyleRecord>("BarberShopStyle.db2", HotfixStatements.SEL_BARBER_SHOP_STYLE, HotfixStatements.SEL_BARBER_SHOP_STYLE_LOCALE);
|
||||
BattlePetBreedQualityStorage = DBReader.Read<BattlePetBreedQualityRecord>("BattlePetBreedQuality.db2", HotfixStatements.SEL_BATTLE_PET_BREED_QUALITY);
|
||||
BattlePetBreedStateStorage = DBReader.Read<BattlePetBreedStateRecord>("BattlePetBreedState.db2", HotfixStatements.SEL_BATTLE_PET_BREED_STATE);
|
||||
BattlePetSpeciesStorage = DBReader.Read<BattlePetSpeciesRecord>("BattlePetSpecies.db2", HotfixStatements.SEL_BATTLE_PET_SPECIES, HotfixStatements.SEL_BATTLE_PET_SPECIES_LOCALE);
|
||||
BattlePetSpeciesStateStorage = DBReader.Read<BattlePetSpeciesStateRecord>("BattlePetSpeciesState.db2", HotfixStatements.SEL_BATTLE_PET_SPECIES_STATE);
|
||||
BattlemasterListStorage = DBReader.Read<BattlemasterListRecord>("BattlemasterList.db2", HotfixStatements.SEL_BATTLEMASTER_LIST, HotfixStatements.SEL_BATTLEMASTER_LIST_LOCALE);
|
||||
BroadcastTextStorage = DBReader.Read<BroadcastTextRecord>("BroadcastText.db2", HotfixStatements.SEL_BROADCAST_TEXT, HotfixStatements.SEL_BROADCAST_TEXT_LOCALE);
|
||||
CharacterFacialHairStylesStorage = DBReader.Read<CharacterFacialHairStylesRecord>("CharacterFacialHairStyles.db2", HotfixStatements.SEL_CHARACTER_FACIAL_HAIR_STYLES);
|
||||
CharBaseSectionStorage = DBReader.Read<CharBaseSectionRecord>("CharBaseSection.db2", HotfixStatements.SEL_CHAR_BASE_SECTION);
|
||||
CharSectionsStorage = DBReader.Read<CharSectionsRecord>("CharSections.db2", HotfixStatements.SEL_CHAR_SECTIONS);
|
||||
CharStartOutfitStorage = DBReader.Read<CharStartOutfitRecord>("CharStartOutfit.db2", HotfixStatements.SEL_CHAR_START_OUTFIT);
|
||||
CharTitlesStorage = DBReader.Read<CharTitlesRecord>("CharTitles.db2", HotfixStatements.SEL_CHAR_TITLES, HotfixStatements.SEL_CHAR_TITLES_LOCALE);
|
||||
ChatChannelsStorage = DBReader.Read<ChatChannelsRecord>("ChatChannels.db2", HotfixStatements.SEL_CHAT_CHANNELS, HotfixStatements.SEL_CHAT_CHANNELS_LOCALE);
|
||||
ChrClassesStorage = DBReader.Read<ChrClassesRecord>("ChrClasses.db2", HotfixStatements.SEL_CHR_CLASSES, HotfixStatements.SEL_CHR_CLASSES_LOCALE);
|
||||
ChrClassesXPowerTypesStorage = DBReader.Read<ChrClassesXPowerTypesRecord>("ChrClassesXPowerTypes.db2", HotfixStatements.SEL_CHR_CLASSES_X_POWER_TYPES);
|
||||
ChrRacesStorage = DBReader.Read<ChrRacesRecord>("ChrRaces.db2", HotfixStatements.SEL_CHR_RACES, HotfixStatements.SEL_CHR_RACES_LOCALE);
|
||||
ChrSpecializationStorage = DBReader.Read<ChrSpecializationRecord>("ChrSpecialization.db2", HotfixStatements.SEL_CHR_SPECIALIZATION, HotfixStatements.SEL_CHR_SPECIALIZATION_LOCALE);
|
||||
CinematicCameraStorage = DBReader.Read<CinematicCameraRecord>("CinematicCamera.db2", HotfixStatements.SEL_CINEMATIC_CAMERA);
|
||||
CinematicSequencesStorage = DBReader.Read<CinematicSequencesRecord>("CinematicSequences.db2", HotfixStatements.SEL_CINEMATIC_SEQUENCES);
|
||||
ConversationLineStorage = DBReader.Read<ConversationLineRecord>("ConversationLine.db2", HotfixStatements.SEL_CONVERSATION_LINE);
|
||||
CreatureDisplayInfoStorage = DBReader.Read<CreatureDisplayInfoRecord>("CreatureDisplayInfo.db2", HotfixStatements.SEL_CREATURE_DISPLAY_INFO);
|
||||
CreatureDisplayInfoExtraStorage = DBReader.Read<CreatureDisplayInfoExtraRecord>("CreatureDisplayInfoExtra.db2", HotfixStatements.SEL_CREATURE_DISPLAY_INFO_EXTRA);
|
||||
CreatureFamilyStorage = DBReader.Read<CreatureFamilyRecord>("CreatureFamily.db2", HotfixStatements.SEL_CREATURE_FAMILY, HotfixStatements.SEL_CREATURE_FAMILY_LOCALE);
|
||||
CreatureModelDataStorage = DBReader.Read<CreatureModelDataRecord>("CreatureModelData.db2", HotfixStatements.SEL_CREATURE_MODEL_DATA);
|
||||
CreatureTypeStorage = DBReader.Read<CreatureTypeRecord>("CreatureType.db2", HotfixStatements.SEL_CREATURE_TYPE, HotfixStatements.SEL_CREATURE_TYPE_LOCALE);
|
||||
CriteriaStorage = DBReader.Read<CriteriaRecord>("Criteria.db2", HotfixStatements.SEL_CRITERIA);
|
||||
CriteriaTreeStorage = DBReader.Read<CriteriaTreeRecord>("CriteriaTree.db2", HotfixStatements.SEL_CRITERIA_TREE, HotfixStatements.SEL_CRITERIA_TREE_LOCALE);
|
||||
CurrencyTypesStorage = DBReader.Read<CurrencyTypesRecord>("CurrencyTypes.db2", HotfixStatements.SEL_CURRENCY_TYPES, HotfixStatements.SEL_CURRENCY_TYPES_LOCALE);
|
||||
CurveStorage = DBReader.Read<CurveRecord>("Curve.db2", HotfixStatements.SEL_CURVE);
|
||||
CurvePointStorage = DBReader.Read<CurvePointRecord>("CurvePoint.db2", HotfixStatements.SEL_CURVE_POINT);
|
||||
DestructibleModelDataStorage = DBReader.Read<DestructibleModelDataRecord>("DestructibleModelData.db2", HotfixStatements.SEL_DESTRUCTIBLE_MODEL_DATA);
|
||||
DifficultyStorage = DBReader.Read<DifficultyRecord>("Difficulty.db2", HotfixStatements.SEL_DIFFICULTY, HotfixStatements.SEL_DIFFICULTY_LOCALE);
|
||||
DungeonEncounterStorage = DBReader.Read<DungeonEncounterRecord>("DungeonEncounter.db2", HotfixStatements.SEL_DUNGEON_ENCOUNTER, HotfixStatements.SEL_DUNGEON_ENCOUNTER_LOCALE);
|
||||
DurabilityCostsStorage = DBReader.Read<DurabilityCostsRecord>("DurabilityCosts.db2", HotfixStatements.SEL_DURABILITY_COSTS);
|
||||
DurabilityQualityStorage = DBReader.Read<DurabilityQualityRecord>("DurabilityQuality.db2", HotfixStatements.SEL_DURABILITY_QUALITY);
|
||||
EmotesStorage = DBReader.Read<EmotesRecord>("Emotes.db2", HotfixStatements.SEL_EMOTES);
|
||||
EmotesTextStorage = DBReader.Read<EmotesTextRecord>("EmotesText.db2", HotfixStatements.SEL_EMOTES_TEXT, HotfixStatements.SEL_EMOTES_TEXT_LOCALE);
|
||||
EmotesTextSoundStorage = DBReader.Read<EmotesTextSoundRecord>("EmotesTextSound.db2", HotfixStatements.SEL_EMOTES_TEXT_SOUND);
|
||||
FactionStorage = DBReader.Read<FactionRecord>("Faction.db2", HotfixStatements.SEL_FACTION, HotfixStatements.SEL_FACTION_LOCALE);
|
||||
FactionTemplateStorage = DBReader.Read<FactionTemplateRecord>("FactionTemplate.db2", HotfixStatements.SEL_FACTION_TEMPLATE);
|
||||
GameObjectsStorage = DBReader.Read<GameObjectsRecord>("GameObjects.db2", HotfixStatements.SEL_GAMEOBJECTS, HotfixStatements.SEL_GAMEOBJECTS_LOCALE);
|
||||
GameObjectDisplayInfoStorage = DBReader.Read<GameObjectDisplayInfoRecord>("GameObjectDisplayInfo.db2", HotfixStatements.SEL_GAMEOBJECT_DISPLAY_INFO);
|
||||
GarrAbilityStorage = DBReader.Read<GarrAbilityRecord>("GarrAbility.db2", HotfixStatements.SEL_GARR_ABILITY, HotfixStatements.SEL_GARR_ABILITY_LOCALE);
|
||||
GarrBuildingStorage = DBReader.Read<GarrBuildingRecord>("GarrBuilding.db2", HotfixStatements.SEL_GARR_BUILDING, HotfixStatements.SEL_GARR_BUILDING_LOCALE);
|
||||
GarrBuildingPlotInstStorage = DBReader.Read<GarrBuildingPlotInstRecord>("GarrBuildingPlotInst.db2", HotfixStatements.SEL_GARR_BUILDING_PLOT_INST);
|
||||
GarrClassSpecStorage = DBReader.Read<GarrClassSpecRecord>("GarrClassSpec.db2", HotfixStatements.SEL_GARR_CLASS_SPEC, HotfixStatements.SEL_GARR_CLASS_SPEC_LOCALE);
|
||||
GarrFollowerStorage = DBReader.Read<GarrFollowerRecord>("GarrFollower.db2", HotfixStatements.SEL_GARR_FOLLOWER, HotfixStatements.SEL_GARR_FOLLOWER_LOCALE);
|
||||
GarrFollowerXAbilityStorage = DBReader.Read<GarrFollowerXAbilityRecord>("GarrFollowerXAbility.db2", HotfixStatements.SEL_GARR_FOLLOWER_X_ABILITY);
|
||||
GarrPlotBuildingStorage = DBReader.Read<GarrPlotBuildingRecord>("GarrPlotBuilding.db2", HotfixStatements.SEL_GARR_PLOT_BUILDING);
|
||||
GarrPlotStorage = DBReader.Read<GarrPlotRecord>("GarrPlot.db2", HotfixStatements.SEL_GARR_PLOT, HotfixStatements.SEL_GARR_PLOT_LOCALE);
|
||||
GarrPlotInstanceStorage = DBReader.Read<GarrPlotInstanceRecord>("GarrPlotInstance.db2", HotfixStatements.SEL_GARR_PLOT_INSTANCE, HotfixStatements.SEL_GARR_PLOT_INSTANCE_LOCALE);
|
||||
GarrSiteLevelStorage = DBReader.Read<GarrSiteLevelRecord>("GarrSiteLevel.db2", HotfixStatements.SEL_GARR_SITE_LEVEL);
|
||||
GarrSiteLevelPlotInstStorage = DBReader.Read<GarrSiteLevelPlotInstRecord>("GarrSiteLevelPlotInst.db2", HotfixStatements.SEL_GARR_SITE_LEVEL_PLOT_INST);
|
||||
GemPropertiesStorage = DBReader.Read<GemPropertiesRecord>("GemProperties.db2", HotfixStatements.SEL_GEM_PROPERTIES);
|
||||
GlyphBindableSpellStorage = DBReader.Read<GlyphBindableSpellRecord>("GlyphBindableSpell.db2", HotfixStatements.SEL_GLYPH_BINDABLE_SPELL);
|
||||
GlyphPropertiesStorage = DBReader.Read<GlyphPropertiesRecord>("GlyphProperties.db2", HotfixStatements.SEL_GLYPH_PROPERTIES);
|
||||
GlyphRequiredSpecStorage = DBReader.Read<GlyphRequiredSpecRecord>("GlyphRequiredSpec.db2", HotfixStatements.SEL_GLYPH_REQUIRED_SPEC);
|
||||
GuildColorBackgroundStorage = DBReader.Read<GuildColorBackgroundRecord>("GuildColorBackground.db2", HotfixStatements.SEL_GUILD_COLOR_BACKGROUND);
|
||||
GuildColorBorderStorage = DBReader.Read<GuildColorBorderRecord>("GuildColorBorder.db2", HotfixStatements.SEL_GUILD_COLOR_BORDER);
|
||||
GuildColorEmblemStorage = DBReader.Read<GuildColorEmblemRecord>("GuildColorEmblem.db2", HotfixStatements.SEL_GUILD_COLOR_EMBLEM);
|
||||
GuildPerkSpellsStorage = DBReader.Read<GuildPerkSpellsRecord>("GuildPerkSpells.db2", HotfixStatements.SEL_GUILD_PERK_SPELLS);
|
||||
HeirloomStorage = DBReader.Read<HeirloomRecord>("Heirloom.db2", HotfixStatements.SEL_HEIRLOOM, HotfixStatements.SEL_HEIRLOOM_LOCALE);
|
||||
HolidaysStorage = DBReader.Read<HolidaysRecord>("Holidays.db2", HotfixStatements.SEL_HOLIDAYS);
|
||||
ImportPriceArmorStorage = DBReader.Read<ImportPriceArmorRecord>("ImportPriceArmor.db2", HotfixStatements.SEL_IMPORT_PRICE_ARMOR);
|
||||
ImportPriceQualityStorage = DBReader.Read<ImportPriceQualityRecord>("ImportPriceQuality.db2", HotfixStatements.SEL_IMPORT_PRICE_QUALITY);
|
||||
ImportPriceShieldStorage = DBReader.Read<ImportPriceShieldRecord>("ImportPriceShield.db2", HotfixStatements.SEL_IMPORT_PRICE_SHIELD);
|
||||
ImportPriceWeaponStorage = DBReader.Read<ImportPriceWeaponRecord>("ImportPriceWeapon.db2", HotfixStatements.SEL_IMPORT_PRICE_WEAPON);
|
||||
ItemAppearanceStorage = DBReader.Read<ItemAppearanceRecord>("ItemAppearance.db2", HotfixStatements.SEL_ITEM_APPEARANCE);
|
||||
ItemArmorQualityStorage = DBReader.Read<ItemArmorQualityRecord>("ItemArmorQuality.db2", HotfixStatements.SEL_ITEM_ARMOR_QUALITY);
|
||||
ItemArmorShieldStorage = DBReader.Read<ItemArmorShieldRecord>("ItemArmorShield.db2", HotfixStatements.SEL_ITEM_ARMOR_SHIELD);
|
||||
ItemArmorTotalStorage = DBReader.Read<ItemArmorTotalRecord>("ItemArmorTotal.db2", HotfixStatements.SEL_ITEM_ARMOR_TOTAL);
|
||||
//ItemBagFamilyStorage = DBReader.Read<ItemBagFamilyRecord>("ItemBagFamily.db2", HotfixStatements.SEL_ITEM_BAG_FAMILY, HotfixStatements.SEL_ITEM_BAG_FAMILY_LOCALE);
|
||||
ItemBonusStorage = DBReader.Read<ItemBonusRecord>("ItemBonus.db2", HotfixStatements.SEL_ITEM_BONUS);
|
||||
ItemBonusListLevelDeltaStorage = DBReader.Read<ItemBonusListLevelDeltaRecord>("ItemBonusListLevelDelta.db2", HotfixStatements.SEL_ITEM_BONUS_LIST_LEVEL_DELTA);
|
||||
ItemBonusTreeNodeStorage = DBReader.Read<ItemBonusTreeNodeRecord>("ItemBonusTreeNode.db2", HotfixStatements.SEL_ITEM_BONUS_TREE_NODE);
|
||||
ItemChildEquipmentStorage = DBReader.Read<ItemChildEquipmentRecord>("ItemChildEquipment.db2", HotfixStatements.SEL_ITEM_CHILD_EQUIPMENT);
|
||||
ItemClassStorage = DBReader.Read<ItemClassRecord>("ItemClass.db2", HotfixStatements.SEL_ITEM_CLASS, HotfixStatements.SEL_ITEM_CLASS_LOCALE);
|
||||
ItemCurrencyCostStorage = DBReader.Read<ItemCurrencyCostRecord>("ItemCurrencyCost.db2", HotfixStatements.SEL_ITEM_CURRENCY_COST);
|
||||
ItemDamageAmmoStorage = DBReader.Read<ItemDamageRecord>("ItemDamageAmmo.db2", HotfixStatements.SEL_ITEM_DAMAGE_AMMO);
|
||||
ItemDamageOneHandStorage = DBReader.Read<ItemDamageRecord>("ItemDamageOneHand.db2", HotfixStatements.SEL_ITEM_DAMAGE_ONE_HAND);
|
||||
ItemDamageOneHandCasterStorage = DBReader.Read<ItemDamageRecord>("ItemDamageOneHandCaster.db2", HotfixStatements.SEL_ITEM_DAMAGE_ONE_HAND_CASTER);
|
||||
ItemDamageTwoHandStorage = DBReader.Read<ItemDamageRecord>("ItemDamageTwoHand.db2", HotfixStatements.SEL_ITEM_DAMAGE_TWO_HAND);
|
||||
ItemDamageTwoHandCasterStorage = DBReader.Read<ItemDamageRecord>("ItemDamageTwoHandCaster.db2", HotfixStatements.SEL_ITEM_DAMAGE_TWO_HAND_CASTER);
|
||||
ItemDisenchantLootStorage = DBReader.Read<ItemDisenchantLootRecord>("ItemDisenchantLoot.db2", HotfixStatements.SEL_ITEM_DISENCHANT_LOOT);
|
||||
ItemEffectStorage = DBReader.Read<ItemEffectRecord>("ItemEffect.db2", HotfixStatements.SEL_ITEM_EFFECT);
|
||||
ItemStorage = DBReader.Read<ItemRecord>("Item.db2", HotfixStatements.SEL_ITEM);
|
||||
ItemExtendedCostStorage = DBReader.Read<ItemExtendedCostRecord>("ItemExtendedCost.db2", HotfixStatements.SEL_ITEM_EXTENDED_COST);
|
||||
ItemLevelSelectorStorage = DBReader.Read<ItemLevelSelectorRecord>("ItemLevelSelector.db2", HotfixStatements.SEL_ITEM_LEVEL_SELECTOR);
|
||||
ItemLevelSelectorQualityStorage = DBReader.Read<ItemLevelSelectorQualityRecord>("ItemLevelSelectorQuality.db2", HotfixStatements.SEL_ITEM_LEVEL_SELECTOR_QUALITY);
|
||||
ItemLevelSelectorQualitySetStorage = DBReader.Read<ItemLevelSelectorQualitySetRecord>("ItemLevelSelectorQualitySet.db2", HotfixStatements.SEL_ITEM_LEVEL_SELECTOR_QUALITY_SET);
|
||||
ItemLimitCategoryStorage = DBReader.Read<ItemLimitCategoryRecord>("ItemLimitCategory.db2", HotfixStatements.SEL_ITEM_LIMIT_CATEGORY, HotfixStatements.SEL_ITEM_LIMIT_CATEGORY_LOCALE);
|
||||
ItemModifiedAppearanceStorage = DBReader.Read<ItemModifiedAppearanceRecord>("ItemModifiedAppearance.db2", HotfixStatements.SEL_ITEM_MODIFIED_APPEARANCE);
|
||||
ItemPriceBaseStorage = DBReader.Read<ItemPriceBaseRecord>("ItemPriceBase.db2", HotfixStatements.SEL_ITEM_PRICE_BASE);
|
||||
ItemRandomPropertiesStorage = DBReader.Read<ItemRandomPropertiesRecord>("ItemRandomProperties.db2", HotfixStatements.SEL_ITEM_RANDOM_PROPERTIES, HotfixStatements.SEL_ITEM_RANDOM_PROPERTIES_LOCALE);
|
||||
ItemRandomSuffixStorage = DBReader.Read<ItemRandomSuffixRecord>("ItemRandomSuffix.db2", HotfixStatements.SEL_ITEM_RANDOM_SUFFIX, HotfixStatements.SEL_ITEM_RANDOM_SUFFIX_LOCALE);
|
||||
ItemSearchNameStorage = DBReader.Read<ItemSearchNameRecord>("ItemSearchName.db2", HotfixStatements.SEL_ITEM_SEARCH_NAME, HotfixStatements.SEL_ITEM_SEARCH_NAME_LOCALE);
|
||||
ItemSetStorage = DBReader.Read<ItemSetRecord>("ItemSet.db2", HotfixStatements.SEL_ITEM_SET, HotfixStatements.SEL_ITEM_SET_LOCALE);
|
||||
ItemSetSpellStorage = DBReader.Read<ItemSetSpellRecord>("ItemSetSpell.db2", HotfixStatements.SEL_ITEM_SET_SPELL);
|
||||
ItemSparseStorage = DBReader.Read<ItemSparseRecord>("ItemSparse.db2", HotfixStatements.SEL_ITEM_SPARSE, HotfixStatements.SEL_ITEM_SPARSE_LOCALE);
|
||||
ItemSpecStorage = DBReader.Read<ItemSpecRecord>("ItemSpec.db2", HotfixStatements.SEL_ITEM_SPEC);
|
||||
ItemSpecOverrideStorage = DBReader.Read<ItemSpecOverrideRecord>("ItemSpecOverride.db2", HotfixStatements.SEL_ITEM_SPEC_OVERRIDE);
|
||||
ItemUpgradeStorage = DBReader.Read<ItemUpgradeRecord>("ItemUpgrade.db2", HotfixStatements.SEL_ITEM_UPGRADE);
|
||||
ItemXBonusTreeStorage = DBReader.Read<ItemXBonusTreeRecord>("ItemXBonusTree.db2", HotfixStatements.SEL_ITEM_X_BONUS_TREE);
|
||||
//KeyChainStorage = DBReader.Read<KeyChainRecord>("KeyChain.db2", HotfixStatements.SEL_KEYCHAIN);
|
||||
LFGDungeonsStorage = DBReader.Read<LFGDungeonsRecord>("LFGDungeons.db2", HotfixStatements.SEL_LFG_DUNGEONS, HotfixStatements.SEL_LFG_DUNGEONS_LOCALE);
|
||||
LightStorage = DBReader.Read<LightRecord>("Light.db2", HotfixStatements.SEL_LIGHT);
|
||||
LiquidTypeStorage = DBReader.Read<LiquidTypeRecord>("LiquidType.db2", HotfixStatements.SEL_LIQUID_TYPE, HotfixStatements.SEL_LIQUID_TYPE_LOCALE);
|
||||
LockStorage = DBReader.Read<LockRecord>("Lock.db2", HotfixStatements.SEL_LOCK);
|
||||
MailTemplateStorage = DBReader.Read<MailTemplateRecord>("MailTemplate.db2", HotfixStatements.SEL_MAIL_TEMPLATE, HotfixStatements.SEL_MAIL_TEMPLATE_LOCALE);
|
||||
MapStorage = DBReader.Read<MapRecord>("Map.db2", HotfixStatements.SEL_MAP, HotfixStatements.SEL_MAP_LOCALE);
|
||||
MapDifficultyStorage = DBReader.Read<MapDifficultyRecord>("MapDifficulty.db2", HotfixStatements.SEL_MAP_DIFFICULTY, HotfixStatements.SEL_MAP_DIFFICULTY_LOCALE);
|
||||
ModifierTreeStorage = DBReader.Read<ModifierTreeRecord>("ModifierTree.db2", HotfixStatements.SEL_MODIFIER_TREE);
|
||||
MountCapabilityStorage = DBReader.Read<MountCapabilityRecord>("MountCapability.db2", HotfixStatements.SEL_MOUNT_CAPABILITY);
|
||||
MountStorage = DBReader.Read<MountRecord>("Mount.db2", HotfixStatements.SEL_MOUNT, HotfixStatements.SEL_MOUNT_LOCALE);
|
||||
MountTypeXCapabilityStorage = DBReader.Read<MountTypeXCapabilityRecord>("MountTypeXCapability.db2", HotfixStatements.SEL_MOUNT_TYPE_X_CAPABILITY);
|
||||
MountXDisplayStorage = DBReader.Read<MountXDisplayRecord>("MountXDisplay.db2", HotfixStatements.SEL_MOUNT_X_DISPLAY);
|
||||
MovieStorage = DBReader.Read<MovieRecord>("Movie.db2", HotfixStatements.SEL_MOVIE);
|
||||
NameGenStorage = DBReader.Read<NameGenRecord>("NameGen.db2", HotfixStatements.SEL_NAME_GEN, HotfixStatements.SEL_NAME_GEN_LOCALE);
|
||||
NamesProfanityStorage = DBReader.Read<NamesProfanityRecord>("NamesProfanity.db2", HotfixStatements.SEL_NAMES_PROFANITY);
|
||||
NamesReservedStorage = DBReader.Read<NamesReservedRecord>("NamesReserved.db2", HotfixStatements.SEL_NAMES_RESERVED, HotfixStatements.SEL_NAMES_RESERVED_LOCALE);
|
||||
NamesReservedLocaleStorage = DBReader.Read<NamesReservedLocaleRecord>("NamesReservedLocale.db2", HotfixStatements.SEL_NAMES_RESERVED_LOCALE);
|
||||
OverrideSpellDataStorage = DBReader.Read<OverrideSpellDataRecord>("OverrideSpellData.db2", HotfixStatements.SEL_OVERRIDE_SPELL_DATA);
|
||||
PhaseStorage = DBReader.Read<PhaseRecord>("Phase.db2", HotfixStatements.SEL_PHASE);
|
||||
PhaseXPhaseGroupStorage = DBReader.Read<PhaseXPhaseGroupRecord>("PhaseXPhaseGroup.db2", HotfixStatements.SEL_PHASE_X_PHASE_GROUP);
|
||||
PlayerConditionStorage = DBReader.Read<PlayerConditionRecord>("PlayerCondition.db2", HotfixStatements.SEL_PLAYER_CONDITION, HotfixStatements.SEL_PLAYER_CONDITION_LOCALE);
|
||||
PowerDisplayStorage = DBReader.Read<PowerDisplayRecord>("PowerDisplay.db2", HotfixStatements.SEL_POWER_DISPLAY);
|
||||
PowerTypeStorage = DBReader.Read<PowerTypeRecord>("PowerType.db2", HotfixStatements.SEL_POWER_TYPE);
|
||||
PrestigeLevelInfoStorage = DBReader.Read<PrestigeLevelInfoRecord>("PrestigeLevelInfo.db2", HotfixStatements.SEL_PRESTIGE_LEVEL_INFO, HotfixStatements.SEL_PRESTIGE_LEVEL_INFO_LOCALE);
|
||||
PVPDifficultyStorage = DBReader.Read<PVPDifficultyRecord>("PVPDifficulty.db2", HotfixStatements.SEL_PVP_DIFFICULTY);
|
||||
PvpRewardStorage = DBReader.Read<PvpRewardRecord>("PvpReward.db2", HotfixStatements.SEL_PVP_REWARD);
|
||||
QuestFactionRewardStorage = DBReader.Read<QuestFactionRewardRecord>("QuestFactionReward.db2", HotfixStatements.SEL_QUEST_FACTION_REWARD);
|
||||
QuestMoneyRewardStorage = DBReader.Read<QuestMoneyRewardRecord>("QuestMoneyReward.db2", HotfixStatements.SEL_QUEST_MONEY_REWARD);
|
||||
QuestPackageItemStorage = DBReader.Read<QuestPackageItemRecord>("QuestPackageItem.db2", HotfixStatements.SEL_QUEST_PACKAGE_ITEM);
|
||||
QuestSortStorage = DBReader.Read<QuestSortRecord>("QuestSort.db2", HotfixStatements.SEL_QUEST_SORT, HotfixStatements.SEL_QUEST_SORT_LOCALE);
|
||||
QuestV2Storage = DBReader.Read<QuestV2Record>("QuestV2.db2", HotfixStatements.SEL_QUEST_V2);
|
||||
QuestXPStorage = DBReader.Read<QuestXPRecord>("QuestXP.db2", HotfixStatements.SEL_QUEST_XP);
|
||||
RandPropPointsStorage = DBReader.Read<RandPropPointsRecord>("RandPropPoints.db2", HotfixStatements.SEL_RAND_PROP_POINTS);
|
||||
RewardPackStorage = DBReader.Read<RewardPackRecord>("RewardPack.db2", HotfixStatements.SEL_REWARD_PACK);
|
||||
RewardPackXItemStorage = DBReader.Read<RewardPackXItemRecord>("RewardPackXItem.db2", HotfixStatements.SEL_REWARD_PACK_X_ITEM);
|
||||
RulesetItemUpgradeStorage = DBReader.Read<RulesetItemUpgradeRecord>("RulesetItemUpgrade.db2", HotfixStatements.SEL_RULESET_ITEM_UPGRADE);
|
||||
SandboxScalingStorage = DBReader.Read<SandboxScalingRecord>("SandboxScaling.db2", HotfixStatements.SEL_SANDBOX_SCALING);
|
||||
ScalingStatDistributionStorage = DBReader.Read<ScalingStatDistributionRecord>("ScalingStatDistribution.db2", HotfixStatements.SEL_SCALING_STAT_DISTRIBUTION);
|
||||
ScenarioStorage = DBReader.Read<ScenarioRecord>("Scenario.db2", HotfixStatements.SEL_SCENARIO, HotfixStatements.SEL_SCENARIO_LOCALE);
|
||||
ScenarioStepStorage = DBReader.Read<ScenarioStepRecord>("ScenarioStep.db2", HotfixStatements.SEL_SCENARIO_STEP, HotfixStatements.SEL_SCENARIO_STEP_LOCALE);
|
||||
//SceneScriptStorage = DBReader.Read<SceneScriptRecord>("SceneScript.db2", HotfixStatements.SEL_SCENE_SCRIPT);
|
||||
SceneScriptGlobalTextStorage = DBReader.Read<SceneScriptGlobalTextRecord>("SceneScriptGlobalText.db2", HotfixStatements.SEL_SCENE_SCRIPT_GLOBAL_TEXT);
|
||||
SceneScriptPackageStorage = DBReader.Read<SceneScriptPackageRecord>("SceneScriptPackage.db2", HotfixStatements.SEL_SCENE_SCRIPT_PACKAGE);
|
||||
SceneScriptTextStorage = DBReader.Read<SceneScriptTextRecord>("SceneScriptText.db2", HotfixStatements.SEL_SCENE_SCRIPT_TEXT);
|
||||
SkillLineStorage = DBReader.Read<SkillLineRecord>("SkillLine.db2", HotfixStatements.SEL_SKILL_LINE, HotfixStatements.SEL_SKILL_LINE_LOCALE);
|
||||
SkillLineAbilityStorage = DBReader.Read<SkillLineAbilityRecord>("SkillLineAbility.db2", HotfixStatements.SEL_SKILL_LINE_ABILITY);
|
||||
SkillRaceClassInfoStorage = DBReader.Read<SkillRaceClassInfoRecord>("SkillRaceClassInfo.db2", HotfixStatements.SEL_SKILL_RACE_CLASS_INFO);
|
||||
SoundKitStorage = DBReader.Read<SoundKitRecord>("SoundKit.db2", HotfixStatements.SEL_SOUND_KIT);
|
||||
SpecializationSpellsStorage = DBReader.Read<SpecializationSpellsRecord>("SpecializationSpells.db2", HotfixStatements.SEL_SPECIALIZATION_SPELLS, HotfixStatements.SEL_SPECIALIZATION_SPELLS_LOCALE);
|
||||
SpellStorage = DBReader.Read<SpellRecord>("Spell.db2", HotfixStatements.SEL_SPELL, HotfixStatements.SEL_SPELL_LOCALE);
|
||||
SpellAuraOptionsStorage = DBReader.Read<SpellAuraOptionsRecord>("SpellAuraOptions.db2", HotfixStatements.SEL_SPELL_AURA_OPTIONS);
|
||||
SpellAuraRestrictionsStorage = DBReader.Read<SpellAuraRestrictionsRecord>("SpellAuraRestrictions.db2", HotfixStatements.SEL_SPELL_AURA_RESTRICTIONS);
|
||||
SpellCastTimesStorage = DBReader.Read<SpellCastTimesRecord>("SpellCastTimes.db2", HotfixStatements.SEL_SPELL_CAST_TIMES);
|
||||
SpellCastingRequirementsStorage = DBReader.Read<SpellCastingRequirementsRecord>("SpellCastingRequirements.db2", HotfixStatements.SEL_SPELL_CASTING_REQUIREMENTS);
|
||||
SpellCategoriesStorage = DBReader.Read<SpellCategoriesRecord>("SpellCategories.db2", HotfixStatements.SEL_SPELL_CATEGORIES);
|
||||
SpellCategoryStorage = DBReader.Read<SpellCategoryRecord>("SpellCategory.db2", HotfixStatements.SEL_SPELL_CATEGORY, HotfixStatements.SEL_SPELL_CATEGORY_LOCALE);
|
||||
SpellClassOptionsStorage = DBReader.Read<SpellClassOptionsRecord>("SpellClassOptions.db2", HotfixStatements.SEL_SPELL_CLASS_OPTIONS);
|
||||
SpellCooldownsStorage = DBReader.Read<SpellCooldownsRecord>("SpellCooldowns.db2", HotfixStatements.SEL_SPELL_COOLDOWNS);
|
||||
SpellDurationStorage = DBReader.Read<SpellDurationRecord>("SpellDuration.db2", HotfixStatements.SEL_SPELL_DURATION);
|
||||
SpellEffectStorage = DBReader.Read<SpellEffectRecord>("SpellEffect.db2", HotfixStatements.SEL_SPELL_EFFECT);
|
||||
SpellEquippedItemsStorage = DBReader.Read<SpellEquippedItemsRecord>("SpellEquippedItems.db2", HotfixStatements.SEL_SPELL_EQUIPPED_ITEMS);
|
||||
SpellFocusObjectStorage = DBReader.Read<SpellFocusObjectRecord>("SpellFocusObject.db2", HotfixStatements.SEL_SPELL_FOCUS_OBJECT, HotfixStatements.SEL_SPELL_FOCUS_OBJECT_LOCALE);
|
||||
SpellInterruptsStorage = DBReader.Read<SpellInterruptsRecord>("SpellInterrupts.db2", HotfixStatements.SEL_SPELL_INTERRUPTS);
|
||||
SpellItemEnchantmentStorage = DBReader.Read<SpellItemEnchantmentRecord>("SpellItemEnchantment.db2", HotfixStatements.SEL_SPELL_ITEM_ENCHANTMENT, HotfixStatements.SEL_SPELL_ITEM_ENCHANTMENT_LOCALE);
|
||||
SpellItemEnchantmentConditionStorage = DBReader.Read<SpellItemEnchantmentConditionRecord>("SpellItemEnchantmentCondition.db2", HotfixStatements.SEL_SPELL_ITEM_ENCHANTMENT_CONDITION);
|
||||
SpellLearnSpellStorage = DBReader.Read<SpellLearnSpellRecord>("SpellLearnSpell.db2", HotfixStatements.SEL_SPELL_LEARN_SPELL);
|
||||
SpellLevelsStorage = DBReader.Read<SpellLevelsRecord>("SpellLevels.db2", HotfixStatements.SEL_SPELL_LEVELS);
|
||||
SpellMiscStorage = DBReader.Read<SpellMiscRecord>("SpellMisc.db2", HotfixStatements.SEL_SPELL_MISC);
|
||||
SpellPowerStorage = DBReader.Read<SpellPowerRecord>("SpellPower.db2", HotfixStatements.SEL_SPELL_POWER);
|
||||
SpellPowerDifficultyStorage = DBReader.Read<SpellPowerDifficultyRecord>("SpellPowerDifficulty.db2", HotfixStatements.SEL_SPELL_POWER_DIFFICULTY);
|
||||
SpellProcsPerMinuteStorage = DBReader.Read<SpellProcsPerMinuteRecord>("SpellProcsPerMinute.db2", HotfixStatements.SEL_SPELL_PROCS_PER_MINUTE);
|
||||
SpellProcsPerMinuteModStorage = DBReader.Read<SpellProcsPerMinuteModRecord>("SpellProcsPerMinuteMod.db2", HotfixStatements.SEL_SPELL_PROCS_PER_MINUTE_MOD);
|
||||
SpellRadiusStorage = DBReader.Read<SpellRadiusRecord>("SpellRadius.db2", HotfixStatements.SEL_SPELL_RADIUS);
|
||||
SpellRangeStorage = DBReader.Read<SpellRangeRecord>("SpellRange.db2", HotfixStatements.SEL_SPELL_RANGE, HotfixStatements.SEL_SPELL_RANGE_LOCALE);
|
||||
SpellReagentsStorage = DBReader.Read<SpellReagentsRecord>("SpellReagents.db2", HotfixStatements.SEL_SPELL_REAGENTS);
|
||||
SpellScalingStorage = DBReader.Read<SpellScalingRecord>("SpellScaling.db2", HotfixStatements.SEL_SPELL_SCALING);
|
||||
SpellShapeshiftStorage = DBReader.Read<SpellShapeshiftRecord>("SpellShapeshift.db2", HotfixStatements.SEL_SPELL_SHAPESHIFT);
|
||||
SpellShapeshiftFormStorage = DBReader.Read<SpellShapeshiftFormRecord>("SpellShapeshiftForm.db2", HotfixStatements.SEL_SPELL_SHAPESHIFT_FORM, HotfixStatements.SEL_SPELL_SHAPESHIFT_FORM_LOCALE);
|
||||
SpellTargetRestrictionsStorage = DBReader.Read<SpellTargetRestrictionsRecord>("SpellTargetRestrictions.db2", HotfixStatements.SEL_SPELL_TARGET_RESTRICTIONS);
|
||||
SpellTotemsStorage = DBReader.Read<SpellTotemsRecord>("SpellTotems.db2", HotfixStatements.SEL_SPELL_TOTEMS);
|
||||
SpellXSpellVisualStorage = DBReader.Read<SpellXSpellVisualRecord>("SpellXSpellVisual.db2", HotfixStatements.SEL_SPELL_X_SPELL_VISUAL);
|
||||
SummonPropertiesStorage = DBReader.Read<SummonPropertiesRecord>("SummonProperties.db2", HotfixStatements.SEL_SUMMON_PROPERTIES);
|
||||
//TactKeyStorage = DBReader.Read<TactKeyRecord>("TactKey.db2", HotfixStatements.SEL_TACT_KEY);
|
||||
TalentStorage = DBReader.Read<TalentRecord>("Talent.db2", HotfixStatements.SEL_TALENT, HotfixStatements.SEL_TALENT_LOCALE);
|
||||
TaxiNodesStorage = DBReader.Read<TaxiNodesRecord>("TaxiNodes.db2", HotfixStatements.SEL_TAXI_NODES, HotfixStatements.SEL_TAXI_NODES_LOCALE);
|
||||
TaxiPathStorage = DBReader.Read<TaxiPathRecord>("TaxiPath.db2", HotfixStatements.SEL_TAXI_PATH);
|
||||
TaxiPathNodeStorage = DBReader.Read<TaxiPathNodeRecord>("TaxiPathNode.db2", HotfixStatements.SEL_TAXI_PATH_NODE);
|
||||
TotemCategoryStorage = DBReader.Read<TotemCategoryRecord>("TotemCategory.db2", HotfixStatements.SEL_TOTEM_CATEGORY, HotfixStatements.SEL_TOTEM_CATEGORY_LOCALE);
|
||||
ToyStorage = DBReader.Read<ToyRecord>("Toy.db2", HotfixStatements.SEL_TOY, HotfixStatements.SEL_TOY_LOCALE);
|
||||
TransmogHolidayStorage = DBReader.Read<TransmogHolidayRecord>("TransmogHoliday.db2", HotfixStatements.SEL_TRANSMOG_HOLIDAY);
|
||||
TransmogSetStorage = DBReader.Read<TransmogSetRecord>("TransmogSet.db2", HotfixStatements.SEL_TRANSMOG_SET, HotfixStatements.SEL_TRANSMOG_SET_LOCALE);
|
||||
TransmogSetGroupStorage = DBReader.Read<TransmogSetGroupRecord>("TransmogSetGroup.db2", HotfixStatements.SEL_TRANSMOG_SET_GROUP, HotfixStatements.SEL_TRANSMOG_SET_GROUP_LOCALE);
|
||||
TransmogSetItemStorage = DBReader.Read<TransmogSetItemRecord>("TransmogSetItem.db2", HotfixStatements.SEL_TRANSMOG_SET_ITEM);
|
||||
TransportAnimationStorage = DBReader.Read<TransportAnimationRecord>("TransportAnimation.db2", HotfixStatements.SEL_TRANSPORT_ANIMATION);
|
||||
TransportRotationStorage = DBReader.Read<TransportRotationRecord>("TransportRotation.db2", HotfixStatements.SEL_TRANSPORT_ROTATION);
|
||||
UnitPowerBarStorage = DBReader.Read<UnitPowerBarRecord>("UnitPowerBar.db2", HotfixStatements.SEL_UNIT_POWER_BAR, HotfixStatements.SEL_UNIT_POWER_BAR_LOCALE);
|
||||
VehicleStorage = DBReader.Read<VehicleRecord>("Vehicle.db2", HotfixStatements.SEL_VEHICLE);
|
||||
VehicleSeatStorage = DBReader.Read<VehicleSeatRecord>("VehicleSeat.db2", HotfixStatements.SEL_VEHICLE_SEAT);
|
||||
WMOAreaTableStorage = DBReader.Read<WMOAreaTableRecord>("WMOAreaTable.db2", HotfixStatements.SEL_WMO_AREA_TABLE, HotfixStatements.SEL_WMO_AREA_TABLE_LOCALE);
|
||||
WorldEffectStorage = DBReader.Read<WorldEffectRecord>("WorldEffect.db2", HotfixStatements.SEL_WORLD_EFFECT);
|
||||
WorldMapAreaStorage = DBReader.Read<WorldMapAreaRecord>("WorldMapArea.db2", HotfixStatements.SEL_WORLD_MAP_AREA);
|
||||
WorldMapOverlayStorage = DBReader.Read<WorldMapOverlayRecord>("WorldMapOverlay.db2", HotfixStatements.SEL_WORLD_MAP_OVERLAY);
|
||||
WorldMapTransformsStorage = DBReader.Read<WorldMapTransformsRecord>("WorldMapTransforms.db2", HotfixStatements.SEL_WORLD_MAP_TRANSFORMS);
|
||||
WorldSafeLocsStorage = DBReader.Read<WorldSafeLocsRecord>("WorldSafeLocs.db2", HotfixStatements.SEL_WORLD_SAFE_LOCS, HotfixStatements.SEL_WORLD_SAFE_LOCS_LOCALE);
|
||||
|
||||
|
||||
foreach (var entry in TaxiPathStorage.Values)
|
||||
{
|
||||
@@ -307,13 +310,13 @@ namespace Game.DataStorage
|
||||
Global.DB2Mgr.LoadStores();
|
||||
|
||||
// Check loaded DB2 files proper version
|
||||
if (!AreaTableStorage.ContainsKey(8485) || // last area (areaflag) added in 7.0.3 (22594)
|
||||
!CharTitlesStorage.ContainsKey(486) || // last char title added in 7.0.3 (22594)
|
||||
!GemPropertiesStorage.ContainsKey(3363) || // last gem property added in 7.0.3 (22594)
|
||||
!ItemStorage.ContainsKey(142526) || // last item added in 7.0.3 (22594)
|
||||
!ItemExtendedCostStorage.ContainsKey(6125) || // last item extended cost added in 7.0.3 (22594)
|
||||
!MapStorage.ContainsKey(1670) || // last map added in 7.0.3 (22594)
|
||||
!SpellStorage.ContainsKey(231371)) // last spell added in 7.0.3 (22594)
|
||||
if (!AreaTableStorage.ContainsKey(9531) || // last area (areaflag) added in 7.0.3 (22594)
|
||||
!CharTitlesStorage.ContainsKey(522) || // last char title added in 7.0.3 (22594)
|
||||
!GemPropertiesStorage.ContainsKey(3632) || // last gem property added in 7.0.3 (22594)
|
||||
!ItemStorage.ContainsKey(157831) || // last item added in 7.0.3 (22594)
|
||||
!ItemExtendedCostStorage.ContainsKey(6300) || // last item extended cost added in 7.0.3 (22594)
|
||||
!MapStorage.ContainsKey(1903) || // last map added in 7.0.3 (22594)
|
||||
!SpellStorage.ContainsKey(263166)) // last spell added in 7.0.3 (22594)
|
||||
{
|
||||
Log.outError(LogFilter.Misc, "You have _outdated_ DB2 files. Please extract correct versions from current using client.");
|
||||
Global.WorldMgr.ShutdownServ(10, ShutdownMask.Force, ShutdownExitCode.Error);
|
||||
@@ -519,11 +522,14 @@ namespace Game.DataStorage
|
||||
public static DB6Storage<RewardPackRecord> RewardPackStorage;
|
||||
public static DB6Storage<RewardPackXItemRecord> RewardPackXItemStorage;
|
||||
public static DB6Storage<RulesetItemUpgradeRecord> RulesetItemUpgradeStorage;
|
||||
public static DB6Storage<SandboxScalingRecord> SandboxScalingStorage;
|
||||
public static DB6Storage<ScalingStatDistributionRecord> ScalingStatDistributionStorage;
|
||||
public static DB6Storage<ScenarioRecord> ScenarioStorage;
|
||||
public static DB6Storage<ScenarioStepRecord> ScenarioStepStorage;
|
||||
//public static DB6Storage<SceneScriptRecord> SceneScriptStorage;
|
||||
public static DB6Storage<SceneScriptGlobalTextRecord> SceneScriptGlobalTextStorage;
|
||||
public static DB6Storage<SceneScriptPackageRecord> SceneScriptPackageStorage;
|
||||
public static DB6Storage<SceneScriptTextRecord> SceneScriptTextStorage;
|
||||
public static DB6Storage<SkillLineRecord> SkillLineStorage;
|
||||
public static DB6Storage<SkillLineAbilityRecord> SkillLineAbilityStorage;
|
||||
public static DB6Storage<SkillRaceClassInfoRecord> SkillRaceClassInfoStorage;
|
||||
@@ -540,7 +546,6 @@ namespace Game.DataStorage
|
||||
public static DB6Storage<SpellCooldownsRecord> SpellCooldownsStorage;
|
||||
public static DB6Storage<SpellDurationRecord> SpellDurationStorage;
|
||||
public static DB6Storage<SpellEffectRecord> SpellEffectStorage;
|
||||
public static DB6Storage<SpellEffectScalingRecord> SpellEffectScalingStorage;
|
||||
public static DB6Storage<SpellEquippedItemsRecord> SpellEquippedItemsStorage;
|
||||
public static DB6Storage<SpellFocusObjectRecord> SpellFocusObjectStorage;
|
||||
public static DB6Storage<SpellInterruptsRecord> SpellInterruptsStorage;
|
||||
|
||||
@@ -0,0 +1,418 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using Framework.IO;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public class BitStream : IDisposable
|
||||
{
|
||||
private byte currentByte;
|
||||
private long offset;
|
||||
private int bit;
|
||||
private Stream stream;
|
||||
private Encoding encoding = Encoding.UTF8;
|
||||
private bool canWrite = true;
|
||||
|
||||
public long Length => stream.Length;
|
||||
public long BitPosition => bit;
|
||||
public long Offset => offset;
|
||||
private bool ValidPosition => offset < Length;
|
||||
|
||||
|
||||
public BitStream(int capacity = 0)
|
||||
{
|
||||
this.stream = new MemoryStream(capacity);
|
||||
offset = bit = 0;
|
||||
canWrite = true;
|
||||
currentByte = 0;
|
||||
}
|
||||
|
||||
public BitStream(byte[] buffer)
|
||||
{
|
||||
this.stream = new MemoryStream(buffer);
|
||||
offset = bit = 0;
|
||||
canWrite = false;
|
||||
currentByte = buffer[0];
|
||||
}
|
||||
|
||||
|
||||
#region Methods
|
||||
public void Seek(long offset, int bit)
|
||||
{
|
||||
if (offset > Length)
|
||||
{
|
||||
this.offset = Length;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (offset >= 0)
|
||||
{
|
||||
this.offset = offset;
|
||||
}
|
||||
else
|
||||
{
|
||||
offset = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (bit >= 8)
|
||||
{
|
||||
this.offset += bit / 8;
|
||||
this.bit = bit % 8;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.bit = bit;
|
||||
}
|
||||
|
||||
UpdateCurrentByte();
|
||||
}
|
||||
|
||||
public bool AdvanceBit()
|
||||
{
|
||||
bit = (bit + 1) % 8;
|
||||
if (bit == 0)
|
||||
{
|
||||
offset++;
|
||||
|
||||
if (canWrite)
|
||||
stream.WriteByte(currentByte);
|
||||
|
||||
UpdateCurrentByte();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public byte[] GetStreamData()
|
||||
{
|
||||
stream.Position = 0;
|
||||
MemoryStream s = new MemoryStream();
|
||||
stream.CopyTo(s);
|
||||
Seek(offset, bit);
|
||||
return s.ToArray();
|
||||
}
|
||||
|
||||
public bool ChangeLength(long length)
|
||||
{
|
||||
if (stream.CanSeek && stream.CanWrite)
|
||||
{
|
||||
stream.SetLength(length);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void CopyStreamTo(Stream stream)
|
||||
{
|
||||
Seek(0, 0);
|
||||
this.stream.CopyTo(stream);
|
||||
}
|
||||
|
||||
public MemoryStream CloneAsMemoryStream() => new MemoryStream(GetStreamData());
|
||||
|
||||
#endregion
|
||||
|
||||
#region Bit Read
|
||||
|
||||
private void UpdateCurrentByte()
|
||||
{
|
||||
stream.Position = offset;
|
||||
|
||||
if (canWrite)
|
||||
{
|
||||
currentByte = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
currentByte = (byte)stream.ReadByte();
|
||||
stream.Position = offset;
|
||||
}
|
||||
}
|
||||
|
||||
private Bit ReadBit()
|
||||
{
|
||||
if (!ValidPosition)
|
||||
throw new IOException("Cannot read in an offset bigger than the length of the stream");
|
||||
|
||||
byte value = (byte)((currentByte >> (bit)) & 1);
|
||||
AdvanceBit();
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public byte[] ReadBytes(long length, bool isBytes = false, long byteLength = 0)
|
||||
{
|
||||
if (isBytes)
|
||||
length *= 8;
|
||||
|
||||
byteLength = (byteLength == 0 ? length / 8 : byteLength);
|
||||
|
||||
byte[] data = new byte[byteLength];
|
||||
for (long i = 0; i < length;)
|
||||
{
|
||||
byte value = 0;
|
||||
for (int p = 0; p < 8 && i < length; i++, p++)
|
||||
value |= (byte)(ReadBit() << p);
|
||||
|
||||
data[((i + 7) / 8) - 1] = value;
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
public byte[] ReadBytesPadded(long length)
|
||||
{
|
||||
int requiredSize = NextPow2((int)(length + 7) / 8);
|
||||
byte[] data = ReadBytes(length, false, requiredSize);
|
||||
return data;
|
||||
}
|
||||
|
||||
public byte ReadByte()
|
||||
{
|
||||
return ReadBytes(8)[0];
|
||||
}
|
||||
|
||||
public byte ReadByte(int bits)
|
||||
{
|
||||
bits = Math.Min(Math.Max(bits, 0), 8); // clamp values
|
||||
return ReadBytes(bits)[0];
|
||||
}
|
||||
|
||||
public string ReadString(int length)
|
||||
{
|
||||
// UTF8 - revert if encoding gets exposed
|
||||
return encoding.GetString(ReadBytes(8 * length));
|
||||
}
|
||||
|
||||
public short ReadInt16()
|
||||
{
|
||||
short value = BitConverter.ToInt16(ReadBytes(16), 0);
|
||||
return value;
|
||||
}
|
||||
|
||||
public int ReadInt32()
|
||||
{
|
||||
int value = BitConverter.ToInt32(ReadBytes(32), 0);
|
||||
return value;
|
||||
}
|
||||
|
||||
public long ReadInt64()
|
||||
{
|
||||
long value = BitConverter.ToInt64(ReadBytes(64), 0);
|
||||
return value;
|
||||
}
|
||||
|
||||
public ushort ReadUInt16()
|
||||
{
|
||||
ushort value = BitConverter.ToUInt16(ReadBytes(16), 0);
|
||||
return value;
|
||||
}
|
||||
|
||||
public uint ReadUInt32(int bitWidth = 32)
|
||||
{
|
||||
bitWidth = Math.Min(Math.Max(bitWidth, 0), 32); // clamp values
|
||||
|
||||
byte[] data = ReadBytes(bitWidth, false, 4);
|
||||
return BitConverter.ToUInt32(data, 0);
|
||||
}
|
||||
|
||||
public ulong ReadUInt64()
|
||||
{
|
||||
ulong value = BitConverter.ToUInt64(ReadBytes(64), 0);
|
||||
return value;
|
||||
}
|
||||
|
||||
private int NextPow2(int v)
|
||||
{
|
||||
v--;
|
||||
v |= v >> 1;
|
||||
v |= v >> 2;
|
||||
v |= v >> 4;
|
||||
v |= v >> 8;
|
||||
v |= v >> 16;
|
||||
v++;
|
||||
return Math.Max(v, 1);
|
||||
}
|
||||
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
((IDisposable)stream)?.Dispose();
|
||||
}
|
||||
|
||||
internal struct Bit
|
||||
{
|
||||
private byte value;
|
||||
|
||||
public Bit(int value)
|
||||
{
|
||||
this.value = (byte)(value & 1);
|
||||
}
|
||||
|
||||
public static implicit operator Bit(int value) => new Bit(value);
|
||||
|
||||
public static implicit operator byte(Bit bit) => bit.value;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class BitReader
|
||||
{
|
||||
private byte[] m_array;
|
||||
private int m_readPos;
|
||||
private int m_readOffset;
|
||||
|
||||
public int Position { get => m_readPos; set => m_readPos = value; }
|
||||
public int Offset { get => m_readOffset; set => m_readOffset = value; }
|
||||
public byte[] Data { get => m_array; set => m_array = value; }
|
||||
|
||||
public BitReader(byte[] data)
|
||||
{
|
||||
m_array = data;
|
||||
}
|
||||
|
||||
public BitReader(byte[] data, int offset)
|
||||
{
|
||||
m_array = data;
|
||||
m_readOffset = offset;
|
||||
}
|
||||
|
||||
public uint ReadUInt32(int numBits)
|
||||
{
|
||||
uint result = FastStruct<uint>.ArrayToStructure(ref m_array[m_readOffset + (m_readPos >> 3)]) << (32 - numBits - (m_readPos & 7)) >> (32 - numBits);
|
||||
m_readPos += numBits;
|
||||
return result;
|
||||
}
|
||||
|
||||
public ulong ReadUInt64(int numBits)
|
||||
{
|
||||
ulong result = FastStruct<ulong>.ArrayToStructure(ref m_array[m_readOffset + (m_readPos >> 3)]) << (64 - numBits - (m_readPos & 7)) >> (64 - numBits);
|
||||
m_readPos += numBits;
|
||||
return result;
|
||||
}
|
||||
|
||||
public Value32 ReadValue32(int numBits)
|
||||
{
|
||||
unsafe
|
||||
{
|
||||
ulong result = ReadUInt32(numBits);
|
||||
return *(Value32*)&result;
|
||||
}
|
||||
}
|
||||
|
||||
public Value64 ReadValue64(int numBits)
|
||||
{
|
||||
unsafe
|
||||
{
|
||||
ulong result = ReadUInt64(numBits);
|
||||
return *(Value64*)&result;
|
||||
}
|
||||
}
|
||||
|
||||
// this will probably work in C# 7.3 once blittable generic constrain added, or not...
|
||||
//public unsafe T Read<T>(int numBits) where T : struct
|
||||
//{
|
||||
// //fixed (byte* ptr = &m_array[m_readOffset + (m_readPos >> 3)])
|
||||
// //{
|
||||
// // T val = *(T*)ptr << (sizeof(T) - numBits - (m_readPos & 7)) >> (sizeof(T) - numBits);
|
||||
// // m_readPos += numBits;
|
||||
// // return val;
|
||||
// //}
|
||||
// //T result = FastStruct<T>.ArrayToStructure(ref m_array[m_readOffset + (m_readPos >> 3)]) << (32 - numBits - (m_readPos & 7)) >> (32 - numBits);
|
||||
// //m_readPos += numBits;
|
||||
// //return result;
|
||||
//}
|
||||
}
|
||||
|
||||
public struct Value32
|
||||
{
|
||||
unsafe fixed byte Value[4];
|
||||
|
||||
public T GetValue<T>() where T : struct
|
||||
{
|
||||
unsafe
|
||||
{
|
||||
fixed (byte* ptr = Value)
|
||||
return FastStruct<T>.ArrayToStructure(ref ptr[0]);
|
||||
}
|
||||
}
|
||||
|
||||
public byte[] GetBytes(int bitSize)
|
||||
{
|
||||
byte[] data = new byte[NextPow2((int)(bitSize + 7) / 8)];
|
||||
unsafe
|
||||
{
|
||||
fixed (byte* ptr = Value)
|
||||
{
|
||||
for (var i = 0; i < data.Length; ++i)
|
||||
data[i] = ptr[i];
|
||||
}
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
private int NextPow2(int v)
|
||||
{
|
||||
v--;
|
||||
v |= v >> 1;
|
||||
v |= v >> 2;
|
||||
v |= v >> 4;
|
||||
v |= v >> 8;
|
||||
v |= v >> 16;
|
||||
v++;
|
||||
return Math.Max(v, 1);
|
||||
}
|
||||
}
|
||||
|
||||
public struct Value64
|
||||
{
|
||||
unsafe fixed byte Value[8];
|
||||
|
||||
public T GetValue<T>() where T : struct
|
||||
{
|
||||
unsafe
|
||||
{
|
||||
fixed (byte* ptr = Value)
|
||||
return FastStruct<T>.ArrayToStructure(ref ptr[0]);
|
||||
}
|
||||
}
|
||||
|
||||
public byte[] GetBytes(int bitSize)
|
||||
{
|
||||
byte[] data = new byte[NextPow2((int)(bitSize + 7) / 8)];
|
||||
unsafe
|
||||
{
|
||||
fixed (byte* ptr = Value)
|
||||
{
|
||||
for (var i = 0; i < data.Length; ++i)
|
||||
data[i] = ptr[i];
|
||||
}
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
private int NextPow2(int v)
|
||||
{
|
||||
v--;
|
||||
v |= v >> 1;
|
||||
v |= v >> 2;
|
||||
v |= v >> 4;
|
||||
v |= v >> 8;
|
||||
v |= v >> 16;
|
||||
v++;
|
||||
return Math.Max(v, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,762 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2018 CypherCore <http://github.com/CypherCore>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using Framework.Collections;
|
||||
using Framework.Constants;
|
||||
using Framework.Database;
|
||||
using Framework.Dynamic;
|
||||
using Framework.GameMath;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public class DB6Reader
|
||||
{
|
||||
internal static DB6Storage<T> Read<T>(string fileName, DB6Meta meta, HotfixStatements preparedStatement, HotfixStatements preparedStatementLocale = 0) where T : new()
|
||||
{
|
||||
DB6Storage<T> storage = new DB6Storage<T>();
|
||||
|
||||
if (!File.Exists(CliDB.DataPath + fileName))
|
||||
{
|
||||
Log.outError(LogFilter.ServerLoading, "File {0} not found.", fileName);
|
||||
return storage;
|
||||
}
|
||||
|
||||
//First lets load field Info
|
||||
var fields = typeof(T).GetFields();
|
||||
DBClientHelper[] fieldsInfo = new DBClientHelper[fields.Length];
|
||||
for (var i = 0; i < fields.Length; ++i)
|
||||
fieldsInfo[i] = new DBClientHelper(fields[i]);
|
||||
|
||||
using (var fileReader = new BinaryReader(new MemoryStream(File.ReadAllBytes(CliDB.DataPath + fileName))))
|
||||
{
|
||||
_header = ReadHeader(fileReader);
|
||||
var data = LoadData(fileReader);
|
||||
|
||||
int commonDataFieldIndex = 0;
|
||||
foreach (var pair in data)
|
||||
{
|
||||
var dataReader = new DB6BinaryReader(pair.Value);
|
||||
var obj = new T();
|
||||
|
||||
int fieldIndex = 0;
|
||||
for (var x = 0; x < _header.FieldCount; ++x)
|
||||
{
|
||||
int arrayLength = meta.ArraySizes[x];
|
||||
if (arrayLength > 1)
|
||||
{
|
||||
for (var z = 0; z < arrayLength; ++z)
|
||||
{
|
||||
var fieldInfo = fieldsInfo[fieldIndex++];
|
||||
if (fieldInfo.IsArray)
|
||||
{
|
||||
//Field is Array
|
||||
Array array = (Array)fieldInfo.Getter(obj);
|
||||
for (var y = 0; y < array.Length; ++y)
|
||||
SetArrayValue(array, y, fieldInfo, dataReader, x);
|
||||
|
||||
arrayLength -= array.Length;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Only Data is Array
|
||||
if (Type.GetTypeCode(fieldInfo.FieldType) == TypeCode.Object)
|
||||
{
|
||||
switch (fieldInfo.FieldType.Name)
|
||||
{
|
||||
case "Vector2":
|
||||
fieldInfo.SetValue(obj, new Vector2(dataReader.ReadSingle(), dataReader.ReadSingle()));
|
||||
arrayLength -= 2;
|
||||
break;
|
||||
case "Vector3":
|
||||
fieldInfo.SetValue(obj, new Vector3(dataReader.ReadSingle(), dataReader.ReadSingle(), dataReader.ReadSingle()));
|
||||
arrayLength -= 3;
|
||||
break;
|
||||
case "LocalizedString":
|
||||
LocalizedString locString = new LocalizedString();
|
||||
locString[Global.WorldMgr.GetDefaultDbcLocale()] = GetString(dataReader, x);
|
||||
fieldInfo.SetValue(obj, locString);
|
||||
arrayLength -= 1;
|
||||
break;
|
||||
case "FlagArray128":
|
||||
FlagArray128 flagArray128 = new FlagArray128(dataReader.GetUInt32(_header.GetFieldBytes(x)), dataReader.GetUInt32(_header.GetFieldBytes(x)), dataReader.GetUInt32(_header.GetFieldBytes(x)), dataReader.GetUInt32(_header.GetFieldBytes(x)));
|
||||
fieldInfo.SetValue(obj, flagArray128);
|
||||
arrayLength -= 4;
|
||||
break;
|
||||
default:
|
||||
Log.outError(LogFilter.ServerLoading, "Unknown Array Type {0} in DBClient File", fieldInfo.FieldType.Name, nameof(T));
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
SetValue(obj, fieldInfo, dataReader, x);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var fieldInfo = fieldsInfo[fieldIndex++];
|
||||
if (fieldInfo.IsArray)
|
||||
{
|
||||
Array array = (Array)fieldInfo.Getter(obj);
|
||||
for (var y = 0; y < array.Length; ++y)
|
||||
SetArrayValue(array, y, fieldInfo, dataReader, x + y);
|
||||
|
||||
x += array.Length - 1;
|
||||
}
|
||||
else
|
||||
SetValue(obj, fieldInfo, dataReader, x);
|
||||
}
|
||||
}
|
||||
|
||||
commonDataFieldIndex = fieldIndex;
|
||||
|
||||
storage.Add((uint)pair.Key, obj);
|
||||
}
|
||||
|
||||
//Get DB field Index
|
||||
uint index = 0;
|
||||
for (uint i = 0; i < _header.FieldCount && i < _header.IndexField; ++i)
|
||||
index += meta.ArraySizes[i];
|
||||
|
||||
ReadCommonData(commonDataFieldIndex, storage, meta, fieldsInfo);
|
||||
storage.LoadData(index, fieldsInfo, preparedStatement, preparedStatementLocale);
|
||||
}
|
||||
|
||||
Global.DB2Mgr.AddDB2(_header.TableHash, storage);
|
||||
CliDB.LoadedFileCount++;
|
||||
return storage;
|
||||
}
|
||||
|
||||
static void ReadCommonData<T>(int fieldIndex, DB6Storage<T> storage, DB6Meta meta, DBClientHelper[] helper) where T : new()
|
||||
{
|
||||
for (int x = (int)_header.FieldCount; x < _header.TotalFieldCount; ++x)
|
||||
{
|
||||
var fieldInfo = helper[fieldIndex++];
|
||||
int arrayLength = meta.ArraySizes[x];
|
||||
|
||||
foreach (var recordId in _commandData[x])
|
||||
{
|
||||
var dataReader = new DB6BinaryReader(recordId.Value);
|
||||
var record = storage.LookupByKey(recordId.Key);
|
||||
|
||||
if (arrayLength > 1)
|
||||
{
|
||||
for (var z = 0; z < arrayLength; ++z)
|
||||
{
|
||||
if (fieldInfo.IsArray)
|
||||
{
|
||||
//Field is Array
|
||||
Array array = (Array)fieldInfo.Getter(record);
|
||||
for (var y = 0; y < array.Length; ++y)
|
||||
SetArrayValue(array, y, fieldInfo, dataReader, x);
|
||||
|
||||
arrayLength -= array.Length;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Only Data is Array
|
||||
if (Type.GetTypeCode(fieldInfo.FieldType) == TypeCode.Object)
|
||||
{
|
||||
Log.outError(LogFilter.Server, "We should not have custom classes in common data");
|
||||
switch (fieldInfo.FieldType.Name)
|
||||
{
|
||||
case "Vector2":
|
||||
fieldInfo.SetValue(record, new Vector2(dataReader.ReadSingle(), dataReader.ReadSingle()));
|
||||
arrayLength -= 2;
|
||||
break;
|
||||
case "Vector3":
|
||||
fieldInfo.SetValue(record, new Vector3(dataReader.ReadSingle(), dataReader.ReadSingle(), dataReader.ReadSingle()));
|
||||
arrayLength -= 3;
|
||||
break;
|
||||
case "LocalizedString":
|
||||
LocalizedString locString = new LocalizedString();
|
||||
locString[Global.WorldMgr.GetDefaultDbcLocale()] = GetString(dataReader, x);
|
||||
fieldInfo.SetValue(record, locString);
|
||||
arrayLength -= 1;
|
||||
break;
|
||||
case "FlagArray128":
|
||||
FlagArray128 flagArray128 = new FlagArray128(dataReader.ReadUInt32(), dataReader.ReadUInt32(), dataReader.ReadUInt32(), dataReader.ReadUInt32());
|
||||
fieldInfo.SetValue(record, flagArray128);
|
||||
arrayLength -= 4;
|
||||
break;
|
||||
default:
|
||||
Log.outError(LogFilter.ServerLoading, "Unknown Array Type {0} in DBClient File", fieldInfo.FieldType.Name, nameof(T));
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
SetValue(record, fieldInfo, dataReader, x);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (fieldInfo.IsArray)
|
||||
{
|
||||
Array array = (Array)fieldInfo.Getter(record);
|
||||
for (var y = 0; y < array.Length; ++y)
|
||||
SetArrayValue(array, y, fieldInfo, dataReader, x + y);
|
||||
|
||||
x += array.Length - 1;
|
||||
}
|
||||
else
|
||||
SetValue(record, fieldInfo, dataReader, x);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void SetArrayValue(Array array, int arrayIndex, DBClientHelper helper, DB6BinaryReader reader, int field)
|
||||
{
|
||||
switch (Type.GetTypeCode(helper.RealType))
|
||||
{
|
||||
case TypeCode.SByte:
|
||||
helper.SetValue(array, reader.ReadSByte(), arrayIndex);
|
||||
break;
|
||||
case TypeCode.Byte:
|
||||
helper.SetValue(array, reader.ReadByte(), arrayIndex);
|
||||
break;
|
||||
case TypeCode.Int16:
|
||||
helper.SetValue(array, reader.ReadInt16(), arrayIndex);
|
||||
break;
|
||||
case TypeCode.UInt16:
|
||||
helper.SetValue(array, reader.ReadUInt16(), arrayIndex);
|
||||
break;
|
||||
case TypeCode.Int32:
|
||||
helper.SetValue(array, reader.GetInt32(_header.GetFieldBytes(field)), arrayIndex);
|
||||
break;
|
||||
case TypeCode.UInt32:
|
||||
helper.SetValue(array, reader.GetUInt32(_header.GetFieldBytes(field)), arrayIndex);
|
||||
break;
|
||||
case TypeCode.Single:
|
||||
helper.SetValue(array, reader.ReadSingle(), arrayIndex);
|
||||
break;
|
||||
case TypeCode.String:
|
||||
helper.SetValue(array, GetString(reader, field), arrayIndex);
|
||||
break;
|
||||
default:
|
||||
Log.outError(LogFilter.ServerLoading, "Wrong Array Type: {0}", helper.FieldType.Name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void SetValue(object obj, DBClientHelper helper, DB6BinaryReader reader, int field)
|
||||
{
|
||||
switch (Type.GetTypeCode(helper.RealType))
|
||||
{
|
||||
case TypeCode.SByte:
|
||||
helper.SetValue(obj, reader.ReadSByte());
|
||||
break;
|
||||
case TypeCode.Byte:
|
||||
helper.SetValue(obj, reader.ReadByte());
|
||||
break;
|
||||
case TypeCode.Int16:
|
||||
helper.SetValue(obj, reader.ReadInt16());
|
||||
break;
|
||||
case TypeCode.UInt16:
|
||||
helper.SetValue(obj, reader.ReadUInt16());
|
||||
break;
|
||||
case TypeCode.Int32:
|
||||
helper.SetValue(obj, reader.GetInt32(_header.GetFieldBytes(field)));
|
||||
break;
|
||||
case TypeCode.UInt32:
|
||||
helper.SetValue(obj, reader.GetUInt32(_header.GetFieldBytes(field)));
|
||||
break;
|
||||
case TypeCode.Single:
|
||||
helper.SetValue(obj, reader.ReadSingle());
|
||||
break;
|
||||
case TypeCode.String:
|
||||
string str = GetString(reader, field);
|
||||
helper.SetValue(obj, str);
|
||||
break;
|
||||
case TypeCode.Object:
|
||||
switch (helper.FieldType.Name)
|
||||
{
|
||||
case "Vector2":
|
||||
helper.SetValue(obj, new Vector2(reader.ReadSingle(), reader.ReadSingle()));
|
||||
break;
|
||||
case "Vector3":
|
||||
helper.SetValue(obj, new Vector3(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()));
|
||||
break;
|
||||
case "LocalizedString":
|
||||
LocalizedString locString = new LocalizedString();
|
||||
locString[Global.WorldMgr.GetDefaultDbcLocale()] = GetString(reader, field);
|
||||
helper.SetValue(obj, locString);
|
||||
break;
|
||||
default:
|
||||
Log.outError(LogFilter.ServerLoading, "Wrong Array Type: {0}", helper.FieldType.Name);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
Log.outError(LogFilter.ServerLoading, "Wrong Array Type: {0}", helper.FieldType.Name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static string GetString(DB6BinaryReader reader, int field)
|
||||
{
|
||||
if (_stringTable != null)
|
||||
return _stringTable.LookupByKey(reader.GetUInt32(_header.GetFieldBytes(field)));
|
||||
|
||||
return reader.ReadCString();
|
||||
}
|
||||
|
||||
static DB6Header ReadHeader(BinaryReader reader)
|
||||
{
|
||||
DB6Header header = new DB6Header();
|
||||
header.Signature = reader.ReadStringFromChars(4);
|
||||
header.RecordCount = reader.ReadUInt32();
|
||||
header.FieldCount = reader.ReadUInt32();
|
||||
header.RecordSize = reader.ReadUInt32();
|
||||
header.StringTableSize = reader.ReadUInt32(); // also offset for sparse table
|
||||
|
||||
header.TableHash = reader.ReadUInt32();
|
||||
header.LayoutHash = reader.ReadUInt32(); // 21737: changed from build number to layoutHash
|
||||
|
||||
header.MinId = reader.ReadInt32();
|
||||
header.MaxId = reader.ReadInt32();
|
||||
header.Locale = reader.ReadInt32();
|
||||
header.CopyTableSize = reader.ReadInt32();
|
||||
header.Flags = reader.ReadUInt16();
|
||||
header.IndexField = reader.ReadUInt16();
|
||||
|
||||
header.TotalFieldCount = reader.ReadUInt32();
|
||||
header.CommonDataSize = reader.ReadUInt32();
|
||||
|
||||
for (int i = 0; i < header.FieldCount; i++)
|
||||
{
|
||||
header.columnMeta.Add(new DB6Header.FieldEntry() { UnusedBits = reader.ReadInt16(), Offset = (short)(reader.ReadInt16() + (header.HasIndexTable() ? 4 : 0)) });
|
||||
}
|
||||
|
||||
if (header.HasIndexTable())
|
||||
{
|
||||
header.FieldCount++;
|
||||
header.columnMeta.Insert(0, new DB6Header.FieldEntry());
|
||||
}
|
||||
|
||||
return header;
|
||||
}
|
||||
|
||||
static Dictionary<int, byte[]> LoadData(BinaryReader reader)
|
||||
{
|
||||
Dictionary<int, byte[]> Data = new Dictionary<int, byte[]>();
|
||||
_stringTable = null;
|
||||
|
||||
// headerSize
|
||||
long recordsOffset = 56 + (_header.HasIndexTable() ? _header.FieldCount - 1 : _header.FieldCount) * 4;
|
||||
long eof = reader.BaseStream.Length;
|
||||
|
||||
long commonDataPos = eof - _header.CommonDataSize;
|
||||
long copyTablePos = commonDataPos - _header.CopyTableSize;
|
||||
long indexTablePos = copyTablePos - (_header.HasIndexTable() ? _header.RecordCount * 4 : 0);
|
||||
long stringTablePos = indexTablePos - (_header.IsSparseTable() ? 0 : _header.StringTableSize);
|
||||
|
||||
// Index table
|
||||
int[] m_indexes = null;
|
||||
|
||||
if (_header.HasIndexTable())
|
||||
{
|
||||
reader.BaseStream.Position = indexTablePos;
|
||||
|
||||
m_indexes = new int[_header.RecordCount];
|
||||
|
||||
for (int i = 0; i < _header.RecordCount; i++)
|
||||
m_indexes[i] = reader.ReadInt32();
|
||||
}
|
||||
|
||||
if (_header.IsSparseTable())
|
||||
{
|
||||
// Records table
|
||||
reader.BaseStream.Position = _header.StringTableSize;
|
||||
|
||||
int ofsTableSize = _header.MaxId - _header.MinId + 1;
|
||||
|
||||
for (int i = 0; i < ofsTableSize; i++)
|
||||
{
|
||||
int offset = reader.ReadInt32();
|
||||
int length = reader.ReadInt16();
|
||||
|
||||
if (offset == 0 || length == 0)
|
||||
continue;
|
||||
|
||||
int id = _header.MinId + i;
|
||||
|
||||
long oldPos = reader.BaseStream.Position;
|
||||
|
||||
reader.BaseStream.Position = offset;
|
||||
|
||||
byte[] recordBytes = reader.ReadBytes(length);
|
||||
|
||||
byte[] newRecordBytes = new byte[recordBytes.Length + 4];
|
||||
|
||||
Array.Copy(BitConverter.GetBytes(id), newRecordBytes, 4);
|
||||
Array.Copy(recordBytes, 0, newRecordBytes, 4, recordBytes.Length);
|
||||
|
||||
Data.Add(id, newRecordBytes);
|
||||
|
||||
reader.BaseStream.Position = oldPos;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Records table
|
||||
reader.BaseStream.Position = recordsOffset;
|
||||
|
||||
for (int i = 0; i < _header.RecordCount; i++)
|
||||
{
|
||||
reader.BaseStream.Position = recordsOffset + i * _header.RecordSize;
|
||||
|
||||
byte[] recordBytes = reader.ReadBytes((int)_header.RecordSize);
|
||||
|
||||
if (_header.HasIndexTable())
|
||||
{
|
||||
byte[] newRecordBytes = new byte[_header.RecordSize + 4];
|
||||
|
||||
Array.Copy(BitConverter.GetBytes(m_indexes[i]), newRecordBytes, 4);
|
||||
Array.Copy(recordBytes, 0, newRecordBytes, 4, recordBytes.Length);
|
||||
|
||||
Data.Add(m_indexes[i], newRecordBytes);
|
||||
}
|
||||
else
|
||||
{
|
||||
int numBytes = (32 - _header.columnMeta[_header.IndexField].UnusedBits) >> 3;
|
||||
int offset = _header.columnMeta[_header.IndexField].Offset;
|
||||
int id = 0;
|
||||
|
||||
for (int j = 0; j < numBytes; j++)
|
||||
id |= (recordBytes[offset + j] << (j * 8));
|
||||
|
||||
Data.Add(id, recordBytes);
|
||||
}
|
||||
}
|
||||
|
||||
// Strings table
|
||||
reader.BaseStream.Position = stringTablePos;
|
||||
|
||||
_stringTable = new Dictionary<int, string>();
|
||||
while (reader.BaseStream.Position != stringTablePos + _header.StringTableSize)
|
||||
{
|
||||
int index = (int)(reader.BaseStream.Position - stringTablePos);
|
||||
_stringTable[index] = reader.ReadCString();
|
||||
}
|
||||
}
|
||||
|
||||
// Copy index table
|
||||
if (copyTablePos != reader.BaseStream.Length && _header.CopyTableSize != 0)
|
||||
{
|
||||
reader.BaseStream.Position = copyTablePos;
|
||||
|
||||
while (reader.BaseStream.Position != reader.BaseStream.Length)
|
||||
{
|
||||
int id = reader.ReadInt32();
|
||||
int idcopy = reader.ReadInt32();
|
||||
|
||||
byte[] copyRow = Data[idcopy];
|
||||
byte[] newRow = new byte[copyRow.Length];
|
||||
|
||||
Array.Copy(copyRow, newRow, newRow.Length);
|
||||
Array.Copy(BitConverter.GetBytes(id), newRow, 4);
|
||||
|
||||
Data.Add(id, newRow);
|
||||
}
|
||||
}
|
||||
|
||||
if (_header.CommonDataSize != 0)
|
||||
{
|
||||
reader.BaseStream.Position = commonDataPos;
|
||||
|
||||
int fieldsCount = reader.ReadInt32();
|
||||
|
||||
_commandData = new Dictionary<int, byte[]>[fieldsCount];
|
||||
|
||||
for (int i = 0; i < fieldsCount; i++)
|
||||
{
|
||||
int count = reader.ReadInt32();
|
||||
byte type = reader.ReadByte();
|
||||
|
||||
_commandData[i] = new Dictionary<int, byte[]>();
|
||||
|
||||
for (int j = 0; j < count; j++)
|
||||
{
|
||||
int id = reader.ReadInt32();
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case 1: // 2 bytes
|
||||
_commandData[i].Add(id, reader.ReadBytes(2));
|
||||
reader.BaseStream.Position += 2;
|
||||
break;
|
||||
case 2: // 1 bytes
|
||||
_commandData[i].Add(id, reader.ReadBytes(1));
|
||||
reader.BaseStream.Position += 3;
|
||||
break;
|
||||
case 3: // 4 bytes
|
||||
case 4:
|
||||
_commandData[i].Add(id, reader.ReadBytes(4));
|
||||
break;
|
||||
default:
|
||||
throw new Exception("Invalid data type " + type);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Data;
|
||||
}
|
||||
|
||||
static DB6Header _header;
|
||||
static Dictionary<int, string> _stringTable;
|
||||
static Dictionary<int, byte[]>[] _commandData;
|
||||
}
|
||||
|
||||
public class GameTableReader
|
||||
{
|
||||
internal static GameTable<T> Read<T>(string fileName) where T : new()
|
||||
{
|
||||
GameTable<T> storage = new GameTable<T>();
|
||||
|
||||
if (!File.Exists(CliDB.DataPath + fileName))
|
||||
{
|
||||
Log.outError(LogFilter.ServerLoading, "File {0} not found.", fileName);
|
||||
return storage;
|
||||
}
|
||||
using (var reader = new StreamReader(CliDB.DataPath + fileName))
|
||||
{
|
||||
string headers = reader.ReadLine();
|
||||
if (headers.IsEmpty())
|
||||
{
|
||||
Log.outError(LogFilter.ServerLoading, "GameTable file {0} is empty.", fileName);
|
||||
return storage;
|
||||
}
|
||||
|
||||
var columnDefs = new StringArray(headers, '\t');
|
||||
|
||||
List<T> data = new List<T>();
|
||||
data.Add(new T()); // row id 0, unused
|
||||
|
||||
string line;
|
||||
while (!(line = reader.ReadLine()).IsEmpty())
|
||||
{
|
||||
var values = new StringArray(line, '\t');
|
||||
if (values.Length == 0)
|
||||
break;
|
||||
|
||||
var obj = new T();
|
||||
var fields = obj.GetType().GetFields();
|
||||
for (int fieldIndex = 0, valueIndex = 1; fieldIndex < fields.Length && valueIndex < values.Length; ++fieldIndex, ++valueIndex)
|
||||
{
|
||||
var field = fields[fieldIndex];
|
||||
if (field.FieldType.IsArray)
|
||||
{
|
||||
Array array = (Array)field.GetValue(obj);
|
||||
for (var i = 0; i < array.Length; ++i)
|
||||
array.SetValue(float.Parse(values[valueIndex++]), i);
|
||||
}
|
||||
else
|
||||
fields[fieldIndex].SetValue(obj, float.Parse(values[valueIndex]));
|
||||
}
|
||||
|
||||
data.Add(obj);
|
||||
}
|
||||
|
||||
storage.SetData(data);
|
||||
}
|
||||
|
||||
CliDB.LoadedFileCount++;
|
||||
return storage;
|
||||
}
|
||||
}
|
||||
|
||||
public struct DBClientHelper
|
||||
{
|
||||
public DBClientHelper(FieldInfo fieldInfo)
|
||||
{
|
||||
IsArray = false;
|
||||
FieldType = RealType = fieldInfo.FieldType;
|
||||
|
||||
if (fieldInfo.FieldType.IsArray)
|
||||
{
|
||||
FieldType = RealType = fieldInfo.FieldType.GetElementType();
|
||||
IsArray = true;
|
||||
}
|
||||
|
||||
IsEnum = FieldType.IsEnum;
|
||||
if (IsEnum)
|
||||
{
|
||||
IsEnum = FieldType.IsEnum;
|
||||
RealType = FieldType.GetEnumUnderlyingType();
|
||||
}
|
||||
|
||||
Setter = fieldInfo.CompileSetter();
|
||||
Getter = fieldInfo.CompileGetter();
|
||||
}
|
||||
|
||||
public void SetValue(Array array, object value, int arrayIndex)
|
||||
{
|
||||
if (!IsEnum)
|
||||
array.SetValue(Convert.ChangeType(value, FieldType), arrayIndex % array.Length);
|
||||
else
|
||||
array.SetValue(Enum.ToObject(FieldType, value), arrayIndex % array.Length);
|
||||
}
|
||||
|
||||
public void SetValue(object obj, object value)
|
||||
{
|
||||
if (!IsEnum)
|
||||
Setter(obj, Convert.ChangeType(value, FieldType));
|
||||
else
|
||||
Setter(obj, Enum.ToObject(FieldType, value));
|
||||
}
|
||||
|
||||
public Type FieldType;
|
||||
public Type RealType;
|
||||
public bool IsArray;
|
||||
bool IsEnum;
|
||||
Action<object, object> Setter;
|
||||
public Func<object, object> Getter;
|
||||
}
|
||||
|
||||
class DB6Header
|
||||
{
|
||||
public bool IsValidDB6File()
|
||||
{
|
||||
return Signature == "WDB6";
|
||||
}
|
||||
|
||||
public bool IsSparseTable()
|
||||
{
|
||||
return Convert.ToBoolean(Flags & 0x1);
|
||||
}
|
||||
|
||||
public bool HasIndexTable()
|
||||
{
|
||||
return Convert.ToBoolean(Flags & 0x4);
|
||||
}
|
||||
|
||||
public int GetFieldBytes(int field)
|
||||
{
|
||||
if (columnMeta.Count <= field)
|
||||
return 4;
|
||||
|
||||
return 4 - columnMeta[field].UnusedBits / 8;
|
||||
}
|
||||
|
||||
public string Signature;
|
||||
public uint RecordCount;
|
||||
public uint FieldCount;
|
||||
public uint RecordSize;
|
||||
public uint StringTableSize;
|
||||
|
||||
public uint TableHash;
|
||||
public uint LayoutHash;
|
||||
public int MinId;
|
||||
public int MaxId;
|
||||
public int Locale;
|
||||
public int CopyTableSize;
|
||||
public uint Flags;
|
||||
public int IndexField;
|
||||
public uint TotalFieldCount;
|
||||
public uint CommonDataSize;
|
||||
|
||||
public List<FieldEntry> columnMeta = new List<FieldEntry>();
|
||||
|
||||
public struct FieldEntry
|
||||
{
|
||||
public short UnusedBits;
|
||||
public short Offset;
|
||||
}
|
||||
}
|
||||
|
||||
class DB6BinaryReader : BinaryReader
|
||||
{
|
||||
public DB6BinaryReader(byte[] data) : base(new MemoryStream(data)) { }
|
||||
|
||||
public int GetInt32(int fieldBytes)
|
||||
{
|
||||
switch (fieldBytes)
|
||||
{
|
||||
case 1:
|
||||
return ReadSByte();
|
||||
case 2:
|
||||
return ReadInt16();
|
||||
case 3:
|
||||
byte[] bytes = ReadBytes(fieldBytes);
|
||||
return bytes[0] | (bytes[1] << 8) | (bytes[2] << 16);
|
||||
default:
|
||||
return ReadInt32();
|
||||
}
|
||||
}
|
||||
|
||||
public uint GetUInt32(int fieldBytes)
|
||||
{
|
||||
switch (fieldBytes)
|
||||
{
|
||||
case 1:
|
||||
return ReadByte();
|
||||
case 2:
|
||||
return ReadUInt16();
|
||||
case 3:
|
||||
byte[] bytes = ReadBytes(fieldBytes);
|
||||
return bytes[0] | ((uint)bytes[1] << 8) | ((uint)bytes[2] << 16);
|
||||
default:
|
||||
return ReadUInt32();
|
||||
}
|
||||
}
|
||||
|
||||
public float GetSingle(int fieldBytes)
|
||||
{
|
||||
switch (fieldBytes)
|
||||
{
|
||||
case 1:
|
||||
return ReadByte();
|
||||
case 2:
|
||||
return ReadUInt16();
|
||||
case 3:
|
||||
byte[] bytes = ReadBytes(fieldBytes);
|
||||
return bytes[0] | ((uint)bytes[1] << 8) | ((uint)bytes[2] << 16);
|
||||
default:
|
||||
return ReadSingle();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class LocalizedString
|
||||
{
|
||||
public bool HasString(LocaleConstant locale = SharedConst.DefaultLocale)
|
||||
{
|
||||
return !string.IsNullOrEmpty(stringStorage[(int)locale]);
|
||||
}
|
||||
|
||||
public string this[LocaleConstant locale]
|
||||
{
|
||||
get
|
||||
{
|
||||
return stringStorage[(int)locale] ?? "";
|
||||
}
|
||||
set
|
||||
{
|
||||
stringStorage[(int)locale] = value;
|
||||
}
|
||||
}
|
||||
|
||||
StringArray stringStorage = new StringArray((int)LocaleConstant.Total);
|
||||
}
|
||||
}
|
||||
@@ -1,643 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2018 CypherCore <http://github.com/CypherCore>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public struct DB6Meta
|
||||
{
|
||||
public DB6Meta(int indexField, byte[] arraySizes)
|
||||
{
|
||||
IndexField = indexField;
|
||||
ArraySizes = arraySizes;
|
||||
}
|
||||
|
||||
int IndexField;
|
||||
public byte[] ArraySizes;
|
||||
}
|
||||
|
||||
public struct DB6Metas
|
||||
{
|
||||
public static DB6Meta AchievementMeta = new DB6Meta(12, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta AchievementCategoryMeta = new DB6Meta(3, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta AdventureJournalMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1 });
|
||||
public static DB6Meta AdventureMapPOIMeta = new DB6Meta(-1, new byte[] { 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta AnimKitMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta AnimKitBoneSetMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta AnimKitBoneSetAliasMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta AnimKitConfigMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta AnimKitConfigBoneSetMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta AnimKitPriorityMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta AnimKitReplacementMeta = new DB6Meta(4, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta AnimKitSegmentMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta AnimReplacementMeta = new DB6Meta(4, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta AnimReplacementSetMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta AnimationDataMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta AreaGroupMemberMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta AreaPOIMeta = new DB6Meta(-1, new byte[] { 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta AreaPOIStateMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta AreaTableMeta = new DB6Meta(-1, new byte[] { 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta AreaTriggerMeta = new DB6Meta(14, new byte[] { 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta AreaTriggerActionSetMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta AreaTriggerBoxMeta = new DB6Meta(-1, new byte[] { 1, 3 });
|
||||
public static DB6Meta AreaTriggerCylinderMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta AreaTriggerSphereMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta ArmorLocationMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ArtifactMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ArtifactAppearanceMeta = new DB6Meta(11, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ArtifactAppearanceSetMeta = new DB6Meta(8, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ArtifactCategoryMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta ArtifactPowerMeta = new DB6Meta(5, new byte[] { 2, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ArtifactPowerLinkMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta ArtifactPowerPickerMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta ArtifactPowerRankMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ArtifactQuestXPMeta = new DB6Meta(-1, new byte[] { 1, 10 });
|
||||
public static DB6Meta ArtifactTierMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ArtifactUnlockMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta AuctionHouseMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta BankBagSlotPricesMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta BannedAddonsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta BarberShopStyleMeta = new DB6Meta(7, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta BattlePetAbilityMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta BattlePetAbilityEffectMeta = new DB6Meta(6, new byte[] { 1, 1, 1, 1, 6, 1, 1 });
|
||||
public static DB6Meta BattlePetAbilityStateMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta BattlePetAbilityTurnMeta = new DB6Meta(5, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta BattlePetBreedQualityMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta BattlePetBreedStateMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta BattlePetEffectPropertiesMeta = new DB6Meta(-1, new byte[] { 1, 6, 1, 6 });
|
||||
public static DB6Meta BattlePetNPCTeamMemberMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta BattlePetSpeciesMeta = new DB6Meta(8, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta BattlePetSpeciesStateMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta BattlePetSpeciesXAbilityMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta BattlePetStateMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta BattlePetVisualMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta BattlemasterListMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta BeamEffectMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta BoneWindModifierModelMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta BoneWindModifiersMeta = new DB6Meta(-1, new byte[] { 1, 3, 1 });
|
||||
public static DB6Meta BountyMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta BountySetMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta BroadcastTextMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 3, 3, 1, 1, 1, 2, 1 });
|
||||
public static DB6Meta CameraEffectMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta CameraEffectEntryMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta CameraModeMeta = new DB6Meta(-1, new byte[] { 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta CameraShakesMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta CastableRaidBuffsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta CelestialBodyMeta = new DB6Meta(14, new byte[] { 1, 1, 2, 1, 1, 2, 2, 2, 1, 2, 1, 3, 1, 1, 1 });
|
||||
public static DB6Meta Cfg_CategoriesMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta Cfg_ConfigsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta Cfg_RegionsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta CharBaseInfoMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta CharBaseSectionMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta CharComponentTextureLayoutsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta CharComponentTextureSectionsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta CharHairGeosetsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta CharSectionsMeta = new DB6Meta(-1, new byte[] { 1, 3, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta CharShipmentMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta CharShipmentContainerMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta CharStartOutfitMeta = new DB6Meta(-1, new byte[] { 1, 24, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta CharTitlesMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta CharacterFaceBoneSetMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta CharacterFacialHairStylesMeta = new DB6Meta(-1, new byte[] { 1, 5, 1, 1, 1 });
|
||||
public static DB6Meta CharacterLoadoutMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta CharacterLoadoutItemMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta ChatChannelsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ChatProfanityMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta ChrClassRaceSexMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ChrClassTitleMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta ChrClassUIDisplayMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta ChrClassVillainMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta ChrClassesMeta = new DB6Meta(18, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ChrClassesXPowerTypesMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta ChrRacesMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3 });
|
||||
public static DB6Meta ChrSpecializationMeta = new DB6Meta(9, new byte[] { 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ChrUpgradeBucketMeta = new DB6Meta(2, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta ChrUpgradeBucketSpellMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta ChrUpgradeTierMeta = new DB6Meta(3, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta CinematicCameraMeta = new DB6Meta(-1, new byte[] { 1, 1, 3, 1, 1 });
|
||||
public static DB6Meta CinematicSequencesMeta = new DB6Meta(-1, new byte[] { 1, 1, 8 });
|
||||
public static DB6Meta CloakDampeningMeta = new DB6Meta(-1, new byte[] { 1, 5, 5, 2, 2, 1, 1, 1 });
|
||||
public static DB6Meta CombatConditionMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 2, 2, 2, 2, 1, 2, 2, 1 });
|
||||
public static DB6Meta CommentatorStartLocationMeta = new DB6Meta(-1, new byte[] { 1, 3, 1 });
|
||||
public static DB6Meta CommentatorTrackedCooldownMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ComponentModelFileDataMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ComponentTextureFileDataMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta ConfigurationWarningMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta ContributionMeta = new DB6Meta(0, new byte[] { 1, 1, 1, 1, 4, 1 });
|
||||
public static DB6Meta ConversationLineMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta CreatureMeta = new DB6Meta(-1, new byte[] { 1, 3, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta CreatureDifficultyMeta = new DB6Meta(-1, new byte[] { 1, 1, 7, 1, 1, 1, 1 });
|
||||
public static DB6Meta CreatureDispXUiCameraMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta CreatureDisplayInfoMeta = new DB6Meta(0, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta CreatureDisplayInfoCondMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3 });
|
||||
public static DB6Meta CreatureDisplayInfoEvtMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta CreatureDisplayInfoExtraMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1 });
|
||||
public static DB6Meta CreatureDisplayInfoTrnMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta CreatureFamilyMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 2, 1, 1, 1, 1 });
|
||||
public static DB6Meta CreatureImmunitiesMeta = new DB6Meta(-1, new byte[] { 1, 2, 1, 1, 1, 1, 1, 1, 8, 16 });
|
||||
public static DB6Meta CreatureModelDataMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta CreatureMovementInfoMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta CreatureSoundDataMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta CreatureTypeMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta CreatureXContributionMeta = new DB6Meta(0, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta CriteriaMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta CriteriaTreeMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta CriteriaTreeXEffectMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta CurrencyCategoryMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta CurrencyTypesMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta CurveMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta CurvePointMeta = new DB6Meta(-1, new byte[] { 1, 2, 1, 1 });
|
||||
public static DB6Meta DeathThudLookupsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta DecalPropertiesMeta = new DB6Meta(0, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta DeclinedWordMeta = new DB6Meta(1, new byte[] { 1, 1 });
|
||||
public static DB6Meta DeclinedWordCasesMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta DestructibleModelDataMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta DeviceBlacklistMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta DeviceDefaultSettingsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta DifficultyMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta DissolveEffectMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta DriverBlacklistMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta DungeonEncounterMeta = new DB6Meta(6, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta DungeonMapMeta = new DB6Meta(7, new byte[] { 2, 2, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta DungeonMapChunkMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta DurabilityCostsMeta = new DB6Meta(-1, new byte[] { 1, 21, 8 });
|
||||
public static DB6Meta DurabilityQualityMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta EdgeGlowEffectMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta EmotesMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta EmotesTextMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta EmotesTextDataMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta EmotesTextSoundMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta EnvironmentalDamageMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta ExhaustionMeta = new DB6Meta(7, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta FactionMeta = new DB6Meta(0, new byte[] { 1, 4, 4, 2, 1, 1, 4, 1, 4, 4, 1, 1, 2, 1, 1, 1 });
|
||||
public static DB6Meta FactionGroupMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta FactionTemplateMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 4, 4, 1, 1, 1 });
|
||||
public static DB6Meta FootprintTexturesMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta FootstepTerrainLookupMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta FriendshipRepReactionMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta FriendshipReputationMeta = new DB6Meta(3, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta FullScreenEffectMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GMSurveyAnswersMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta GMSurveyCurrentSurveyMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta GMSurveyQuestionsMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta GMSurveySurveysMeta = new DB6Meta(-1, new byte[] { 1, 15 });
|
||||
public static DB6Meta GameObjectArtKitMeta = new DB6Meta(-1, new byte[] { 1, 3, 1 });
|
||||
public static DB6Meta GameObjectDiffAnimMapMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GameObjectDisplayInfoMeta = new DB6Meta(-1, new byte[] { 1, 1, 6, 1, 1, 1 });
|
||||
public static DB6Meta GameObjectDisplayInfoXSoundKitMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta GameObjectsMeta = new DB6Meta(11, new byte[] { 3, 4, 1, 8, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GameTipsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrAbilityMeta = new DB6Meta(7, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrAbilityCategoryMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta GarrAbilityEffectMeta = new DB6Meta(11, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrBuildingMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrBuildingDoodadSetMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrBuildingPlotInstMeta = new DB6Meta(4, new byte[] { 2, 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrClassSpecMeta = new DB6Meta(7, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrClassSpecPlayerCondMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrEncounterMeta = new DB6Meta(5, new byte[] { 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrEncounterSetXEncounterMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta GarrEncounterXMechanicMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrFollItemSetMemberMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrFollSupportSpellMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrFollowerMeta = new DB6Meta(31, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrFollowerLevelXPMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrFollowerQualityMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrFollowerSetXFollowerMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta GarrFollowerTypeMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrFollowerUICreatureMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrFollowerXAbilityMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrItemLevelUpgradeDataMeta = new DB6Meta(0, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrMechanicMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrMechanicSetXMechanicMeta = new DB6Meta(1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta GarrMechanicTypeMeta = new DB6Meta(4, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrMissionMeta = new DB6Meta(19, new byte[] { 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrMissionTextureMeta = new DB6Meta(-1, new byte[] { 1, 2, 1 });
|
||||
public static DB6Meta GarrMissionTypeMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrMissionXEncounterMeta = new DB6Meta(1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrMissionXFollowerMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrMssnBonusAbilityMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrPlotMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 2 });
|
||||
public static DB6Meta GarrPlotBuildingMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta GarrPlotInstanceMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta GarrPlotUICategoryMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta GarrSiteLevelMeta = new DB6Meta(-1, new byte[] { 1, 2, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrSiteLevelPlotInstMeta = new DB6Meta(-1, new byte[] { 1, 2, 1, 1, 1 });
|
||||
public static DB6Meta GarrSpecializationMeta = new DB6Meta(-1, new byte[] { 1, 1, 2, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrStringMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta GarrTalentMeta = new DB6Meta(7, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrTalentTreeMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrTypeMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 2 });
|
||||
public static DB6Meta GarrUiAnimClassInfoMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GarrUiAnimRaceInfoMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GemPropertiesMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta GlobalStringsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta GlyphBindableSpellMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta GlyphExclusiveCategoryMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta GlyphPropertiesMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GlyphRequiredSpecMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta GroundEffectDoodadMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GroundEffectTextureMeta = new DB6Meta(-1, new byte[] { 1, 4, 4, 1, 1 });
|
||||
public static DB6Meta GroupFinderActivityMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta GroupFinderActivityGrpMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta GroupFinderCategoryMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta GuildColorBackgroundMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta GuildColorBorderMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta GuildColorEmblemMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta GuildPerkSpellsMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta HeirloomMeta = new DB6Meta(9, new byte[] { 1, 1, 1, 1, 1, 3, 3, 1, 1, 1 });
|
||||
public static DB6Meta HelmetAnimScalingMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta HelmetGeosetVisDataMeta = new DB6Meta(-1, new byte[] { 1, 9 });
|
||||
public static DB6Meta HighlightColorMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta HolidayDescriptionsMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta HolidayNamesMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta HolidaysMeta = new DB6Meta(-1, new byte[] { 1, 16, 10, 1, 1, 10, 1, 1, 1, 1, 1, 3 });
|
||||
public static DB6Meta HotfixMeta = new DB6Meta(0, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta ImportPriceArmorMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ImportPriceQualityMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta ImportPriceShieldMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta ImportPriceWeaponMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta InvasionClientDataMeta = new DB6Meta(2, new byte[] { 1, 2, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ItemMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ItemAppearanceMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ItemAppearanceXUiCameraMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta ItemArmorQualityMeta = new DB6Meta(-1, new byte[] { 1, 7, 1 });
|
||||
public static DB6Meta ItemArmorShieldMeta = new DB6Meta(-1, new byte[] { 1, 7, 1 });
|
||||
public static DB6Meta ItemArmorTotalMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ItemBagFamilyMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta ItemBonusMeta = new DB6Meta(-1, new byte[] { 1, 2, 1, 1, 1 });
|
||||
public static DB6Meta ItemBonusListLevelDeltaMeta = new DB6Meta(1, new byte[] { 1, 1 });
|
||||
public static DB6Meta ItemBonusTreeNodeMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ItemChildEquipmentMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta ItemClassMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ItemContextPickerEntryMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ItemCurrencyCostMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta ItemDamageAmmoMeta = new DB6Meta(-1, new byte[] { 1, 7, 1 });
|
||||
public static DB6Meta ItemDamageOneHandMeta = new DB6Meta(-1, new byte[] { 1, 7, 1 });
|
||||
public static DB6Meta ItemDamageOneHandCasterMeta = new DB6Meta(-1, new byte[] { 1, 7, 1 });
|
||||
public static DB6Meta ItemDamageTwoHandMeta = new DB6Meta(-1, new byte[] { 1, 7, 1 });
|
||||
public static DB6Meta ItemDamageTwoHandCasterMeta = new DB6Meta(-1, new byte[] { 1, 7, 1 });
|
||||
public static DB6Meta ItemDisenchantLootMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ItemDisplayInfoMeta = new DB6Meta(-1, new byte[] { 1, 2, 2, 4, 4, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ItemDisplayInfoMaterialResMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta ItemDisplayXUiCameraMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta ItemEffectMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ItemExtendedCostMeta = new DB6Meta(-1, new byte[] { 1, 5, 5, 5, 1, 5, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ItemGroupSoundsMeta = new DB6Meta(-1, new byte[] { 1, 4 });
|
||||
public static DB6Meta ItemLevelSelectorMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta ItemLevelSelectorQualityMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta ItemLevelSelectorQualitySetMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta ItemLimitCategoryMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta ItemLimitCategoryConditionMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta ItemModifiedAppearanceMeta = new DB6Meta(5, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ItemModifiedAppearanceExtraMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ItemNameDescriptionMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta ItemPetFoodMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta ItemPriceBaseMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta ItemRandomPropertiesMeta = new DB6Meta(-1, new byte[] { 1, 1, 5 });
|
||||
public static DB6Meta ItemRandomSuffixMeta = new DB6Meta(-1, new byte[] { 1, 1, 5, 5 });
|
||||
public static DB6Meta ItemRangedDisplayInfoMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ItemSearchNameMeta = new DB6Meta(0, new byte[] { 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ItemSetMeta = new DB6Meta(-1, new byte[] { 1, 1, 17, 1, 1, 1 });
|
||||
public static DB6Meta ItemSetSpellMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ItemSparseMeta = new DB6Meta(-1, new byte[] { 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1 });
|
||||
public static DB6Meta ItemSpecMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ItemSpecOverrideMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta ItemSubClassMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ItemSubClassMaskMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta ItemUpgradeMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ItemVisualsMeta = new DB6Meta(-1, new byte[] { 1, 5 });
|
||||
public static DB6Meta ItemXBonusTreeMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta JournalEncounterMeta = new DB6Meta(-1, new byte[] { 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta JournalEncounterCreatureMeta = new DB6Meta(6, new byte[] { 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta JournalEncounterItemMeta = new DB6Meta(5, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta JournalEncounterSectionMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta JournalEncounterXDifficultyMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta JournalEncounterXMapLocMeta = new DB6Meta(-1, new byte[] { 1, 2, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta JournalInstanceMeta = new DB6Meta(10, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta JournalItemXDifficultyMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta JournalSectionXDifficultyMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta JournalTierMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta JournalTierXInstanceMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta KeychainMeta = new DB6Meta(-1, new byte[] { 1, 32 });
|
||||
public static DB6Meta KeystoneAffixMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta LanguageWordsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta LanguagesMeta = new DB6Meta(1, new byte[] { 1, 1 });
|
||||
public static DB6Meta LfgDungeonExpansionMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta LfgDungeonGroupMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta LFGDungeonsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta LfgDungeonsGroupingMapMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta LfgRoleRequirementMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta LightMeta = new DB6Meta(-1, new byte[] { 1, 3, 1, 1, 1, 8 });
|
||||
public static DB6Meta LightDataMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta LightParamsMeta = new DB6Meta(10, new byte[] { 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta LightSkyboxMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta LiquidMaterialMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta LiquidObjectMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta LiquidTypeMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 6, 2, 18, 4, 1, 1, 1, 1, 1, 1, 6, 1 });
|
||||
public static DB6Meta LoadingScreenTaxiSplinesMeta = new DB6Meta(-1, new byte[] { 1, 10, 10, 1, 1, 1 });
|
||||
public static DB6Meta LoadingScreensMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta LocaleMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta LocationMeta = new DB6Meta(-1, new byte[] { 1, 3, 3 });
|
||||
public static DB6Meta LockMeta = new DB6Meta(-1, new byte[] { 1, 8, 8, 8, 8 });
|
||||
public static DB6Meta LockTypeMeta = new DB6Meta(4, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta LookAtControllerMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta MailTemplateMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta ManagedWorldStateMeta = new DB6Meta(9, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ManagedWorldStateBuffMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ManagedWorldStateInputMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta ManifestInterfaceActionIconMeta = new DB6Meta(0, new byte[] { 1 });
|
||||
public static DB6Meta ManifestInterfaceDataMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta ManifestInterfaceItemIconMeta = new DB6Meta(0, new byte[] { 1 });
|
||||
public static DB6Meta ManifestInterfaceTOCDataMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta ManifestMP3Meta = new DB6Meta(0, new byte[] { 1 });
|
||||
public static DB6Meta MapMeta = new DB6Meta(-1, new byte[] { 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta MapCelestialBodyMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta MapChallengeModeMeta = new DB6Meta(0, new byte[] { 1, 1, 1, 3, 1 });
|
||||
public static DB6Meta MapDifficultyMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta MapDifficultyXConditionMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta MapLoadingScreenMeta = new DB6Meta(-1, new byte[] { 1, 2, 2, 1, 1, 1 });
|
||||
public static DB6Meta MarketingPromotionsXLocaleMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta MaterialMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta MinorTalentMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta MissileTargetingMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2 });
|
||||
public static DB6Meta ModelAnimCloakDampeningMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta ModelFileDataMeta = new DB6Meta(1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta ModelRibbonQualityMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta ModifierTreeMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta MountMeta = new DB6Meta(8, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta MountCapabilityMeta = new DB6Meta(6, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta MountTypeXCapabilityMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta MountXDisplayMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta MovieMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta MovieFileDataMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta MovieVariationMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta NPCModelItemSlotDisplayInfoMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta NPCSoundsMeta = new DB6Meta(-1, new byte[] { 1, 4 });
|
||||
public static DB6Meta NameGenMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta NamesProfanityMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta NamesReservedMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta NamesReservedLocaleMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta ObjectEffectMeta = new DB6Meta(-1, new byte[] { 1, 3, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ObjectEffectGroupMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta ObjectEffectModifierMeta = new DB6Meta(-1, new byte[] { 1, 4, 1, 1, 1 });
|
||||
public static DB6Meta ObjectEffectPackageMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta ObjectEffectPackageElemMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta OutlineEffectMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta OverrideSpellDataMeta = new DB6Meta(-1, new byte[] { 1, 10, 1, 1 });
|
||||
public static DB6Meta PageTextMaterialMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta PaperDollItemFrameMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta ParagonReputationMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta ParticleColorMeta = new DB6Meta(-1, new byte[] { 1, 3, 3, 3 });
|
||||
public static DB6Meta PathMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta PathNodeMeta = new DB6Meta(0, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta PathNodePropertyMeta = new DB6Meta(3, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta PathPropertyMeta = new DB6Meta(3, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta PhaseMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta PhaseShiftZoneSoundsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta PhaseXPhaseGroupMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta PlayerConditionMeta = new DB6Meta(0, new byte[] { 1, 1, 2, 4, 1, 4, 4, 4, 4, 4, 4, 2, 4, 4, 1, 3, 4, 4, 4, 4, 1, 3, 4, 4, 4, 4, 4, 6, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta PositionerMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta PositionerStateMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta PositionerStateEntryMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta PowerDisplayMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta PowerTypeMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta PrestigeLevelInfoMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta PvpBracketTypesMeta = new DB6Meta(-1, new byte[] { 1, 1, 4 });
|
||||
public static DB6Meta PvpDifficultyMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta PvpItemMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta PvpRewardMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta PvpScalingEffectMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta PvpScalingEffectTypeMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta PvpTalentMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta PvpTalentUnlockMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta QuestFactionRewardMeta = new DB6Meta(-1, new byte[] { 1, 10 });
|
||||
public static DB6Meta QuestFeedbackEffectMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta QuestInfoMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta QuestLineMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta QuestLineXQuestMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta QuestMoneyRewardMeta = new DB6Meta(-1, new byte[] { 1, 10 });
|
||||
public static DB6Meta QuestObjectiveMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta QuestPOIBlobMeta = new DB6Meta(0, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta QuestPOIPointMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta QuestPOIPointCliTaskMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta QuestPackageItemMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta QuestSortMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta QuestV2Meta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta QuestV2CliTaskMeta = new DB6Meta(20, new byte[] { 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta QuestXGroupActivityMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta QuestXPMeta = new DB6Meta(-1, new byte[] { 1, 10 });
|
||||
public static DB6Meta RandPropPointsMeta = new DB6Meta(-1, new byte[] { 1, 5, 5, 5 });
|
||||
public static DB6Meta RelicSlotTierRequirementMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta RelicTalentMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ResearchBranchMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ResearchFieldMeta = new DB6Meta(2, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta ResearchProjectMeta = new DB6Meta(7, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ResearchSiteMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ResistancesMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta RewardPackMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta RewardPackXCurrencyTypeMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta RewardPackXItemMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta RibbonQualityMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta RulesetItemUpgradeMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta ScalingStatDistributionMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta ScenarioMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ScenarioEventEntryMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta ScenarioStepMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SceneScriptMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SceneScriptPackageMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta SceneScriptPackageMemberMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ScheduledIntervalMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ScheduledWorldStateMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ScheduledWorldStateGroupMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ScheduledWorldStateXUniqCatMeta = new DB6Meta(0, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta ScreenEffectMeta = new DB6Meta(-1, new byte[] { 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ScreenLocationMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta SeamlessSiteMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta ServerMessagesMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta ShadowyEffectMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SkillLineMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SkillLineAbilityMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SkillRaceClassInfoMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SoundAmbienceMeta = new DB6Meta(-1, new byte[] { 1, 1, 2, 1, 1 });
|
||||
public static DB6Meta SoundAmbienceFlavorMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta SoundBusMeta = new DB6Meta(7, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SoundBusOverrideMeta = new DB6Meta(0, new byte[] { 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SoundEmitterPillPointsMeta = new DB6Meta(-1, new byte[] { 1, 3, 1 });
|
||||
public static DB6Meta SoundEmittersMeta = new DB6Meta(9, new byte[] { 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SoundEnvelopeMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SoundFilterMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta SoundFilterElemMeta = new DB6Meta(-1, new byte[] { 1, 9, 1, 1 });
|
||||
public static DB6Meta SoundKitMeta = new DB6Meta(0, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SoundKitAdvancedMeta = new DB6Meta(0, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SoundKitChildMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta SoundKitEntryMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SoundKitFallbackMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta SoundKitNameMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta SoundOverrideMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SoundProviderPreferencesMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SourceInfoMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpamMessagesMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta SpecializationSpellsMeta = new DB6Meta(5, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellMeta = new DB6Meta(5, new byte[] { 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellActionBarPrefMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta SpellActivationOverlayMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 4, 1, 1, 1 });
|
||||
public static DB6Meta SpellAuraOptionsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellAuraRestrictionsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellAuraVisXChrSpecMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta SpellAuraVisibilityMeta = new DB6Meta(3, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellCastTimesMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellCastingRequirementsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellCategoriesMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellCategoryMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellChainEffectsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3 });
|
||||
public static DB6Meta SpellClassOptionsMeta = new DB6Meta(-1, new byte[] { 1, 1, 4, 1, 1 });
|
||||
public static DB6Meta SpellCooldownsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellDescriptionVariablesMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta SpellDispelTypeMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellDurationMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellEffectMeta = new DB6Meta(1, new byte[] { 4, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellEffectEmissionMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellEffectGroupSizeMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta SpellEffectScalingMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellEquippedItemsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellFlyoutMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellFlyoutItemMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellFocusObjectMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta SpellInterruptsMeta = new DB6Meta(-1, new byte[] { 1, 1, 2, 2, 1, 1 });
|
||||
public static DB6Meta SpellItemEnchantmentMeta = new DB6Meta(-1, new byte[] { 1, 3, 1, 3, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellItemEnchantmentConditionMeta = new DB6Meta(-1, new byte[] { 1, 5, 5, 5, 5, 5, 5 });
|
||||
public static DB6Meta SpellKeyboundOverrideMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellLabelMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta SpellLearnSpellMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellLevelsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellMechanicMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta SpellMiscMeta = new DB6Meta(-1, new byte[] { 1, 14, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellMiscDifficultyMeta = new DB6Meta(2, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta SpellMissileMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellMissileMotionMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellPowerMeta = new DB6Meta(8, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellPowerDifficultyMeta = new DB6Meta(2, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta SpellProceduralEffectMeta = new DB6Meta(2, new byte[] { 4, 1, 1 });
|
||||
public static DB6Meta SpellProcsPerMinuteMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta SpellProcsPerMinuteModMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellRadiusMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellRangeMeta = new DB6Meta(-1, new byte[] { 1, 2, 2, 1, 1, 1 });
|
||||
public static DB6Meta SpellReagentsMeta = new DB6Meta(-1, new byte[] { 1, 1, 8, 8 });
|
||||
public static DB6Meta SpellReagentsCurrencyMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellScalingMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellShapeshiftMeta = new DB6Meta(-1, new byte[] { 1, 1, 2, 2, 1 });
|
||||
public static DB6Meta SpellShapeshiftFormMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8 });
|
||||
public static DB6Meta SpellSpecialUnitEffectMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta SpellTargetRestrictionsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellTotemsMeta = new DB6Meta(-1, new byte[] { 1, 1, 2, 2 });
|
||||
public static DB6Meta SpellVisualMeta = new DB6Meta(4, new byte[] { 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellVisualAnimMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellVisualColorEffectMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellVisualEffectNameMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellVisualEventMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellVisualKitMeta = new DB6Meta(0, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellVisualKitAreaModelMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellVisualKitEffectMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellVisualKitModelAttachMeta = new DB6Meta(6, new byte[] { 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellVisualMissileMeta = new DB6Meta(13, new byte[] { 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SpellXSpellVisualMeta = new DB6Meta(2, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta StartupFilesMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta Startup_StringsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta StationeryMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 2 });
|
||||
public static DB6Meta SummonPropertiesMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta TactKeyMeta = new DB6Meta(-1, new byte[] { 1, 16 });
|
||||
public static DB6Meta TactKeyLookupMeta = new DB6Meta(-1, new byte[] { 1, 8 });
|
||||
public static DB6Meta TalentMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 2, 1 });
|
||||
public static DB6Meta TaxiNodesMeta = new DB6Meta(-1, new byte[] { 1, 3, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta TaxiPathMeta = new DB6Meta(2, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta TaxiPathNodeMeta = new DB6Meta(8, new byte[] { 3, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta TerrainMaterialMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta TerrainTypeMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta TerrainTypeSoundsMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta TextureBlendSetMeta = new DB6Meta(-1, new byte[] { 1, 3, 3, 3, 3, 3, 4, 1, 1, 1, 1 });
|
||||
public static DB6Meta TextureFileDataMeta = new DB6Meta(2, new byte[] { 1, 1 });
|
||||
public static DB6Meta TotemCategoryMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta ToyMeta = new DB6Meta(4, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta TradeSkillCategoryMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta TradeSkillItemMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta TransformMatrixMeta = new DB6Meta(-1, new byte[] { 1, 3, 1, 1, 1, 1 });
|
||||
public static DB6Meta TransmogHolidayMeta = new DB6Meta(0, new byte[] { 1, 1 });
|
||||
public static DB6Meta TransmogSetMeta = new DB6Meta(4, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta TransmogSetGroupMeta = new DB6Meta(1, new byte[] { 1, 1 });
|
||||
public static DB6Meta TransmogSetItemMeta = new DB6Meta(0, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta TransportAnimationMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 3, 1 });
|
||||
public static DB6Meta TransportPhysicsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta TransportRotationMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 4 });
|
||||
public static DB6Meta TrophyMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta UIExpansionDisplayInfoMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta UIExpansionDisplayInfoIconMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta UiCamFbackTransmogChrRaceMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta UiCamFbackTransmogWeaponMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta UiCameraMeta = new DB6Meta(-1, new byte[] { 1, 1, 3, 3, 3, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta UiCameraTypeMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta UiMapPOIMeta = new DB6Meta(6, new byte[] { 1, 3, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta UiModelSceneMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta UiModelSceneActorMeta = new DB6Meta(7, new byte[] { 1, 3, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta UiModelSceneActorDisplayMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta UiModelSceneCameraMeta = new DB6Meta(14, new byte[] { 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta UiTextureAtlasMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta UiTextureAtlasMemberMeta = new DB6Meta(0, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta UiTextureKitMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta UnitBloodMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta UnitBloodLevelsMeta = new DB6Meta(-1, new byte[] { 1, 3 });
|
||||
public static DB6Meta UnitConditionMeta = new DB6Meta(-1, new byte[] { 1, 8, 1, 8, 8 });
|
||||
public static DB6Meta UnitPowerBarMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta UnitTestMeta = new DB6Meta(2, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta VehicleMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 3, 1, 1, 1 });
|
||||
public static DB6Meta VehicleSeatMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta VehicleUIIndSeatMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta VehicleUIIndicatorMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta VideoHardwareMeta = new DB6Meta(14, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta VignetteMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta VirtualAttachmentMeta = new DB6Meta(-1, new byte[] { 1, 1, 1});
|
||||
public static DB6Meta VirtualAttachmentCustomizationMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta VocalUISoundsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 2 });
|
||||
public static DB6Meta WbAccessControlListMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta WbCertWhitelistMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta WeaponImpactSoundsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 11, 11, 11, 11 });
|
||||
public static DB6Meta WeaponSwingSounds2Meta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta WeaponTrailMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 3, 3, 3, 3, 3 });
|
||||
public static DB6Meta WeaponTrailModelDefMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta WeaponTrailParamMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta WeatherMeta = new DB6Meta(-1, new byte[] { 1, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta WindSettingsMeta = new DB6Meta(-1, new byte[] { 1, 1, 3, 1, 1, 3, 1, 3, 1, 1, 1 });
|
||||
public static DB6Meta WMOAreaTableMeta = new DB6Meta(13, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta WMOMinimapTextureMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1});
|
||||
public static DB6Meta WorldBossLockoutMeta = new DB6Meta(-1, new byte[] { 1, 1, 1 });
|
||||
public static DB6Meta WorldChunkSoundsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta WorldEffectMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta WorldElapsedTimerMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta WorldMapAreaMeta = new DB6Meta(15, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta WorldMapContinentMeta = new DB6Meta(-1, new byte[] { 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta WorldMapOverlayMeta = new DB6Meta(0, new byte[] { 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta WorldMapTransformsMeta = new DB6Meta(-1, new byte[] { 1, 6, 2, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta WorldSafeLocsMeta = new DB6Meta(-1, new byte[] { 1, 3, 1, 1, 1 });
|
||||
public static DB6Meta WorldStateExpressionMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
public static DB6Meta WorldStateUIMeta = new DB6Meta(14, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta WorldStateZoneSoundsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta World_PVP_AreaMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ZoneIntroMusicTableMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta ZoneLightMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta ZoneLightPointMeta = new DB6Meta(-1, new byte[] { 1, 2, 1, 1 });
|
||||
public static DB6Meta ZoneMusicMeta = new DB6Meta(-1, new byte[] { 1, 1, 2, 2, 2 });
|
||||
}
|
||||
}
|
||||
@@ -37,14 +37,14 @@ namespace Game.DataStorage
|
||||
[Serializable]
|
||||
public class DB6Storage<T> : Dictionary<uint, T>, IDB2Storage where T : new()
|
||||
{
|
||||
public void LoadData(uint indexField, DBClientHelper[] helpers, HotfixStatements preparedStatement, HotfixStatements preparedStatementLocale)
|
||||
public void LoadData(int indexField, DB6FieldInfo[] helpers, HotfixStatements preparedStatement, HotfixStatements preparedStatementLocale)
|
||||
{
|
||||
SQLResult result = DB.Hotfix.Query(DB.Hotfix.GetPreparedStatement(preparedStatement));
|
||||
if (!result.IsEmpty())
|
||||
{
|
||||
do
|
||||
{
|
||||
var idValue = result.Read<uint>((int)indexField);
|
||||
var idValue = result.Read<uint>(indexField == -1 ? 0 : indexField);
|
||||
|
||||
var obj = new T();
|
||||
int index = 0;
|
||||
@@ -56,7 +56,7 @@ namespace Game.DataStorage
|
||||
Array array = (Array)helper.Getter(obj);
|
||||
for (var i = 0; i < array.Length; ++i)
|
||||
{
|
||||
switch (Type.GetTypeCode(helper.RealType))
|
||||
switch (Type.GetTypeCode(helper.FieldType))
|
||||
{
|
||||
case TypeCode.SByte:
|
||||
helper.SetValue(array, result.Read<sbyte>(index++), i);
|
||||
@@ -116,7 +116,7 @@ namespace Game.DataStorage
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (Type.GetTypeCode(helper.RealType))
|
||||
switch (Type.GetTypeCode(helper.FieldType))
|
||||
{
|
||||
case TypeCode.SByte:
|
||||
helper.SetValue(obj, result.Read<sbyte>(index++));
|
||||
|
||||
@@ -0,0 +1,800 @@
|
||||
using Framework.Collections;
|
||||
using Framework.Constants;
|
||||
using Framework.Database;
|
||||
using Framework.Dynamic;
|
||||
using Framework.GameMath;
|
||||
using Framework.IO;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Linq;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
class DBReader
|
||||
{
|
||||
public static DB6Storage<T> Read<T>(string fileName, HotfixStatements preparedStatement, HotfixStatements preparedStatementLocale = 0) where T : new()
|
||||
{
|
||||
ClearData();
|
||||
|
||||
DB6Storage<T> storage = new DB6Storage<T>();
|
||||
|
||||
if (!File.Exists(CliDB.DataPath + fileName))
|
||||
{
|
||||
Log.outError(LogFilter.ServerLoading, "File {0} not found.", fileName);
|
||||
return storage;
|
||||
}
|
||||
|
||||
//First lets load field Info
|
||||
var fields = typeof(T).GetFields();
|
||||
DB6FieldInfo[] fieldsInfo = new DB6FieldInfo[fields.Length];
|
||||
for (var i = 0; i < fields.Length; ++i)
|
||||
fieldsInfo[i] = new DB6FieldInfo(fields[i]);
|
||||
|
||||
using (var fileReader = new BinaryReader(new MemoryStream(File.ReadAllBytes(CliDB.DataPath + fileName))))
|
||||
{
|
||||
ReadHeader(fileReader);
|
||||
|
||||
var records = ReadData(fileReader);
|
||||
foreach (var pair in records)
|
||||
{
|
||||
using (MemoryStream ms = new MemoryStream(pair.Value))
|
||||
using (BinaryReader dataReader = new BinaryReader(ms, System.Text.Encoding.UTF8))
|
||||
{
|
||||
var obj = new T();
|
||||
|
||||
int objectFieldIndex = 0;
|
||||
//First check if index is in data
|
||||
if (Header.HasIndexTable())
|
||||
fieldsInfo[objectFieldIndex++].SetValue(obj, (uint)pair.Key);
|
||||
|
||||
for (var dataFieldIndex = 0; dataFieldIndex < Header.FieldCount; ++dataFieldIndex)
|
||||
{
|
||||
int arrayLength = ColumnMeta[dataFieldIndex].ArraySize;
|
||||
if (arrayLength > 1)
|
||||
{
|
||||
for (var arrayIndex = 0; arrayIndex < arrayLength; ++arrayIndex)
|
||||
{
|
||||
var fieldInfo = fieldsInfo[objectFieldIndex++];
|
||||
if (fieldInfo.IsArray)
|
||||
{
|
||||
Array array = (Array)fieldInfo.Getter(obj);
|
||||
SetArrayValue(obj, array.Length, fieldInfo, dataReader);
|
||||
|
||||
arrayLength -= array.Length;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Only Data is Array
|
||||
if (Type.GetTypeCode(fieldInfo.FieldType) == TypeCode.Object)
|
||||
{
|
||||
switch (fieldInfo.FieldType.Name)
|
||||
{
|
||||
case "Vector2":
|
||||
fieldInfo.SetValue(obj, dataReader.Read<Vector2>());
|
||||
arrayLength -= 2;
|
||||
break;
|
||||
case "Vector3":
|
||||
fieldInfo.SetValue(obj, dataReader.Read<Vector3>());
|
||||
arrayLength -= 3;
|
||||
break;
|
||||
case "LocalizedString":
|
||||
LocalizedString locString = new LocalizedString();
|
||||
locString[Global.WorldMgr.GetDefaultDbcLocale()] = GetString(dataReader);
|
||||
fieldInfo.SetValue(obj, locString);
|
||||
arrayLength -= 1;
|
||||
break;
|
||||
case "FlagArray128":
|
||||
fieldInfo.SetValue(obj, new FlagArray128(dataReader.ReadUInt32(), dataReader.ReadUInt32(), dataReader.ReadUInt32(), dataReader.ReadUInt32()));
|
||||
arrayLength -= 4;
|
||||
break;
|
||||
default:
|
||||
Log.outError(LogFilter.ServerLoading, "Unknown Array Type {0} in DBClient File", fieldInfo.FieldType.Name, nameof(T));
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
SetValue(obj, fieldInfo, dataReader);
|
||||
}
|
||||
|
||||
dataReader.BaseStream.Position += GetPadding(fieldInfo.FieldType, dataFieldIndex);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var fieldInfo = fieldsInfo[objectFieldIndex++];
|
||||
if (fieldInfo.IsArray)
|
||||
{
|
||||
Array array = (Array)fieldInfo.Getter(obj);
|
||||
SetArrayValue(obj, array.Length, fieldInfo, dataReader);
|
||||
|
||||
dataFieldIndex += array.Length - 1;
|
||||
}
|
||||
else
|
||||
SetValue(obj, fieldInfo, dataReader);
|
||||
|
||||
dataReader.BaseStream.Position += GetPadding(fieldInfo.FieldType, dataFieldIndex);
|
||||
}
|
||||
}
|
||||
|
||||
//Check if there is parent ids and fill them
|
||||
if (objectFieldIndex < fieldsInfo.Length && Header.LookupColumnCount > 0)
|
||||
fieldsInfo[objectFieldIndex].SetValue(obj, dataReader.ReadUInt32());
|
||||
|
||||
storage.Add((uint)pair.Key, obj);
|
||||
}
|
||||
}
|
||||
|
||||
storage.LoadData(Header.IdIndex, fieldsInfo, preparedStatement, preparedStatementLocale);
|
||||
}
|
||||
|
||||
Global.DB2Mgr.AddDB2(Header.TableHash, storage);
|
||||
CliDB.LoadedFileCount++;
|
||||
return storage;
|
||||
}
|
||||
|
||||
static void ClearData()
|
||||
{
|
||||
Header = null;
|
||||
StringTable = null;
|
||||
FieldStructure = null;
|
||||
ColumnMeta = null;
|
||||
RelationShipData = null;
|
||||
}
|
||||
|
||||
static void ReadHeader(BinaryReader reader)
|
||||
{
|
||||
Header = new DB6Header();
|
||||
Header.Signature = reader.ReadStringFromChars(4);
|
||||
Header.RecordCount = reader.ReadUInt32();
|
||||
Header.FieldCount = reader.ReadUInt32();
|
||||
Header.RecordSize = reader.ReadUInt32();
|
||||
Header.StringTableSize = reader.ReadUInt32(); // also offset for sparse table
|
||||
|
||||
Header.TableHash = reader.ReadUInt32();
|
||||
Header.LayoutHash = reader.ReadUInt32();
|
||||
Header.MinId = reader.ReadInt32();
|
||||
Header.MaxId = reader.ReadInt32();
|
||||
Header.Locale = reader.ReadInt32();
|
||||
Header.CopyTableSize = reader.ReadInt32();
|
||||
Header.Flags = (HeaderFlags)reader.ReadUInt16();
|
||||
Header.IdIndex = reader.ReadUInt16();
|
||||
Header.TotalFieldCount = reader.ReadUInt32();
|
||||
|
||||
Header.BitpackedDataOffset = reader.ReadUInt32();
|
||||
Header.LookupColumnCount = reader.ReadUInt32();
|
||||
Header.OffsetTableOffset = reader.ReadUInt32();
|
||||
Header.IdListSize = reader.ReadUInt32();
|
||||
Header.ColumnMetaSize = reader.ReadUInt32();
|
||||
Header.CommonDataSize = reader.ReadUInt32();
|
||||
Header.PalletDataSize = reader.ReadUInt32();
|
||||
Header.RelationshipDataSize = reader.ReadUInt32();
|
||||
|
||||
//Gather field structures
|
||||
FieldStructure = new List<FieldStructureEntry>();
|
||||
for (int i = 0; i < Header.FieldCount; i++)
|
||||
{
|
||||
var field = new FieldStructureEntry(reader.ReadInt16(), reader.ReadUInt16());
|
||||
FieldStructure.Add(field);
|
||||
}
|
||||
}
|
||||
|
||||
static Dictionary<int, byte[]> ReadData(BinaryReader reader)
|
||||
{
|
||||
Dictionary<int, byte[]> CopyTable = new Dictionary<int, byte[]>();
|
||||
List<Tuple<int, short>> offsetmap = new List<Tuple<int, short>>();
|
||||
Dictionary<int, OffsetDuplicate> firstindex = new Dictionary<int, OffsetDuplicate>();
|
||||
Dictionary<int, int> OffsetDuplicates = new Dictionary<int, int>();
|
||||
Dictionary<int, List<int>> Copies = new Dictionary<int, List<int>>();
|
||||
|
||||
byte[] recordData;
|
||||
if (Header.HasOffsetTable())
|
||||
recordData = reader.ReadBytes((int)(Header.OffsetTableOffset - 84 - 4 * Header.FieldCount));
|
||||
else
|
||||
{
|
||||
recordData = reader.ReadBytes((int)(Header.RecordCount * Header.RecordSize));
|
||||
Array.Resize(ref recordData, recordData.Length + 8);
|
||||
}
|
||||
|
||||
if (Header.StringTableSize != 0)
|
||||
{
|
||||
// string data
|
||||
StringTable = new Dictionary<int, string>();
|
||||
|
||||
for (int i = 0; i < Header.StringTableSize;)
|
||||
{
|
||||
long oldPos = reader.BaseStream.Position;
|
||||
|
||||
StringTable[i] = reader.ReadCString();
|
||||
|
||||
i += (int)(reader.BaseStream.Position - oldPos);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
int[] m_indexes = null;
|
||||
|
||||
// OffsetTable
|
||||
if (Header.HasOffsetTable() && Header.OffsetTableOffset > 0)
|
||||
{
|
||||
reader.BaseStream.Position = Header.OffsetTableOffset;
|
||||
for (int i = 0; i < (Header.MaxId - Header.MinId + 1); i++)
|
||||
{
|
||||
int offset = reader.ReadInt32();
|
||||
short length = reader.ReadInt16();
|
||||
|
||||
if (offset == 0 || length == 0)
|
||||
continue;
|
||||
|
||||
// special case, may contain duplicates in the offset map that we don't want
|
||||
if (Header.CopyTableSize == 0)
|
||||
{
|
||||
if (!firstindex.ContainsKey(offset))
|
||||
firstindex.Add(offset, new OffsetDuplicate(offsetmap.Count, firstindex.Count));
|
||||
else
|
||||
OffsetDuplicates.Add(Header.MinId + i, firstindex[offset].VisibleIndex);
|
||||
}
|
||||
|
||||
offsetmap.Add(new Tuple<int, short>(offset, length));
|
||||
}
|
||||
}
|
||||
|
||||
// IndexTable
|
||||
if (Header.HasIndexTable())
|
||||
{
|
||||
m_indexes = new int[Header.RecordCount];
|
||||
for (int i = 0; i < Header.RecordCount; i++)
|
||||
m_indexes[i] = reader.ReadInt32();
|
||||
}
|
||||
|
||||
// Copytable
|
||||
if (Header.CopyTableSize > 0)
|
||||
{
|
||||
long end = reader.BaseStream.Position + Header.CopyTableSize;
|
||||
while (reader.BaseStream.Position < end)
|
||||
{
|
||||
int id = reader.ReadInt32();
|
||||
int idcopy = reader.ReadInt32();
|
||||
|
||||
if (!Copies.ContainsKey(idcopy))
|
||||
Copies.Add(idcopy, new List<int>());
|
||||
|
||||
Copies[idcopy].Add(id);
|
||||
}
|
||||
|
||||
CliDB.Size += (uint)(Copies.Count * Header.RecordSize);
|
||||
}
|
||||
|
||||
// ColumnMeta
|
||||
ColumnMeta = new List<ColumnStructureEntry>();
|
||||
if (Header.ColumnMetaSize != 0)
|
||||
{
|
||||
for (int i = 0; i < Header.FieldCount; i++)
|
||||
{
|
||||
var column = new ColumnStructureEntry()
|
||||
{
|
||||
RecordOffset = reader.ReadUInt16(),
|
||||
Size = reader.ReadUInt16(),
|
||||
AdditionalDataSize = reader.ReadUInt32(), // size of pallet / sparse values
|
||||
CompressionType = (DB2ColumnCompression)reader.ReadUInt32(),
|
||||
BitOffset = reader.ReadInt32(),
|
||||
BitWidth = reader.ReadInt32(),
|
||||
Cardinality = reader.ReadInt32()
|
||||
};
|
||||
|
||||
// preload arraysizes
|
||||
if (column.CompressionType == DB2ColumnCompression.None)
|
||||
column.ArraySize = Math.Max(column.Size / FieldStructure[i].BitCount, 1);
|
||||
else if (column.CompressionType == DB2ColumnCompression.PalletArray)
|
||||
column.ArraySize = Math.Max(column.Cardinality, 1);
|
||||
|
||||
ColumnMeta.Add(column);
|
||||
}
|
||||
}
|
||||
|
||||
// Pallet values
|
||||
for (int i = 0; i < ColumnMeta.Count; i++)
|
||||
{
|
||||
if (ColumnMeta[i].CompressionType == DB2ColumnCompression.Pallet || ColumnMeta[i].CompressionType == DB2ColumnCompression.PalletArray)
|
||||
{
|
||||
int elements = (int)ColumnMeta[i].AdditionalDataSize / 4;
|
||||
int cardinality = Math.Max(ColumnMeta[i].Cardinality, 1);
|
||||
|
||||
ColumnMeta[i].PalletValues = new List<byte[]>();
|
||||
for (int j = 0; j < elements / cardinality; j++)
|
||||
ColumnMeta[i].PalletValues.Add(reader.ReadBytes(cardinality * 4));
|
||||
}
|
||||
}
|
||||
|
||||
// Sparse values
|
||||
for (int i = 0; i < ColumnMeta.Count; i++)
|
||||
{
|
||||
if (ColumnMeta[i].CompressionType == DB2ColumnCompression.CommonData)
|
||||
{
|
||||
ColumnMeta[i].SparseValues = new Dictionary<int, byte[]>();
|
||||
for (int j = 0; j < ColumnMeta[i].AdditionalDataSize / 8; j++)
|
||||
ColumnMeta[i].SparseValues[reader.ReadInt32()] = reader.ReadBytes(4);
|
||||
}
|
||||
}
|
||||
|
||||
// Relationships
|
||||
if (Header.RelationshipDataSize > 0)
|
||||
{
|
||||
RelationShipData = new RelationShipData()
|
||||
{
|
||||
Records = reader.ReadUInt32(),
|
||||
MinId = reader.ReadUInt32(),
|
||||
MaxId = reader.ReadUInt32(),
|
||||
Entries = new Dictionary<uint, byte[]>()
|
||||
};
|
||||
|
||||
for (int i = 0; i < RelationShipData.Records; i++)
|
||||
{
|
||||
byte[] foreignKey = reader.ReadBytes(4);
|
||||
uint index = reader.ReadUInt32();
|
||||
// has duplicates just like the copy table does... why?
|
||||
if (!RelationShipData.Entries.ContainsKey(index))
|
||||
RelationShipData.Entries.Add(index, foreignKey);
|
||||
}
|
||||
}
|
||||
|
||||
// Record Data
|
||||
for (int i = 0; i < Header.RecordCount; i++)
|
||||
{
|
||||
int id = 0;
|
||||
|
||||
if (Header.HasOffsetTable() && Header.HasIndexTable())
|
||||
{
|
||||
id = m_indexes[CopyTable.Count];
|
||||
var map = offsetmap[i];
|
||||
|
||||
if (Header.CopyTableSize == 0 && firstindex[map.Item1].HiddenIndex != i) // ignore duplicates
|
||||
continue;
|
||||
|
||||
reader.BaseStream.Position = map.Item1;
|
||||
|
||||
byte[] data = reader.ReadBytes(map.Item2);
|
||||
|
||||
IEnumerable<byte> recordbytes = data;
|
||||
|
||||
// append relationship id
|
||||
if (RelationShipData != null)
|
||||
{
|
||||
// seen cases of missing indicies
|
||||
if (RelationShipData.Entries.TryGetValue((uint)i, out byte[] foreignData))
|
||||
recordbytes = recordbytes.Concat(foreignData);
|
||||
else
|
||||
recordbytes = recordbytes.Concat(new byte[4]);
|
||||
}
|
||||
|
||||
CopyTable.Add(id, recordbytes.ToArray());
|
||||
|
||||
if (Copies.ContainsKey(id))
|
||||
{
|
||||
foreach (int copy in Copies[id])
|
||||
CopyTable.Add(copy, data.ToArray());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
BitReader bitReader = new BitReader(recordData);
|
||||
bitReader.Offset = i * (int)Header.RecordSize;
|
||||
|
||||
List<byte> data = new List<byte>();
|
||||
|
||||
if (Header.HasIndexTable())
|
||||
id = m_indexes[i];
|
||||
|
||||
for (int f = 0; f < Header.FieldCount; f++)
|
||||
{
|
||||
int bitWidth = ColumnMeta[f].BitWidth;
|
||||
|
||||
switch (ColumnMeta[f].CompressionType)
|
||||
{
|
||||
case DB2ColumnCompression.None:
|
||||
int bitSize = FieldStructure[f].BitCount;
|
||||
if (!Header.HasIndexTable() && f == Header.IdIndex)
|
||||
{
|
||||
id = (int)bitReader.ReadUInt32(bitSize);// always read Ids as ints
|
||||
data.AddRange(BitConverter.GetBytes(id));
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int x = 0; x < ColumnMeta[f].ArraySize; x++)
|
||||
data.AddRange(bitReader.ReadValue64(bitSize).GetBytes(bitSize));
|
||||
}
|
||||
break;
|
||||
|
||||
case DB2ColumnCompression.Immediate:
|
||||
if (!Header.HasIndexTable() && f == Header.IdIndex)
|
||||
{
|
||||
id = (int)bitReader.ReadUInt32(bitWidth);// always read Ids as ints
|
||||
data.AddRange(BitConverter.GetBytes(id));
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
data.AddRange(bitReader.ReadValue64(bitWidth).GetBytes(bitWidth));
|
||||
}
|
||||
break;
|
||||
|
||||
case DB2ColumnCompression.CommonData:
|
||||
if (ColumnMeta[f].SparseValues.TryGetValue(id, out byte[] valBytes))
|
||||
data.AddRange(valBytes);
|
||||
else
|
||||
data.AddRange(BitConverter.GetBytes(ColumnMeta[f].BitOffset));
|
||||
break;
|
||||
|
||||
case DB2ColumnCompression.Pallet:
|
||||
case DB2ColumnCompression.PalletArray:
|
||||
uint palletIndex = bitReader.ReadUInt32(bitWidth);
|
||||
data.AddRange(ColumnMeta[f].PalletValues[(int)palletIndex]);
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new Exception($"Unknown compression {ColumnMeta[f].CompressionType}");
|
||||
}
|
||||
}
|
||||
|
||||
// append relationship id
|
||||
if (RelationShipData != null)
|
||||
{
|
||||
// seen cases of missing indicies
|
||||
if (RelationShipData.Entries.TryGetValue((uint)i, out byte[] foreignData))
|
||||
data.AddRange(foreignData);
|
||||
else
|
||||
data.AddRange(new byte[4]);
|
||||
}
|
||||
|
||||
CopyTable.Add(id, data.ToArray());
|
||||
|
||||
if (Copies.ContainsKey(id))
|
||||
{
|
||||
foreach (int copy in Copies[id])
|
||||
{
|
||||
byte[] newrecord = CopyTable[id].ToArray();
|
||||
CopyTable.Add(copy, newrecord);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return CopyTable;
|
||||
}
|
||||
|
||||
static Dictionary<Type, int> bytecounts = new Dictionary<Type, int>()
|
||||
{
|
||||
{ typeof(byte), 1 },
|
||||
{ typeof(short), 2 },
|
||||
{ typeof(ushort), 2 },
|
||||
};
|
||||
|
||||
static int GetPadding(Type type, int fieldIndex)
|
||||
{
|
||||
if (!bytecounts.ContainsKey(type))
|
||||
return 0;
|
||||
|
||||
if (ColumnMeta[fieldIndex].CompressionType < DB2ColumnCompression.CommonData)
|
||||
return 0;
|
||||
|
||||
return 4 - bytecounts[type];
|
||||
}
|
||||
|
||||
static FieldStructureEntry[] GetBits()
|
||||
{
|
||||
List<FieldStructureEntry> bits = new List<FieldStructureEntry>();
|
||||
for (int i = 0; i < ColumnMeta.Count; i++)
|
||||
{
|
||||
short bitcount = (short)(FieldStructure[i].BitCount == 64 ? FieldStructure[i].BitCount : 0); // force bitcounts
|
||||
bits.Add(new FieldStructureEntry(bitcount, 0));
|
||||
}
|
||||
|
||||
return bits.ToArray();
|
||||
}
|
||||
|
||||
static void SetArrayValue(object obj, int arraySize, DB6FieldInfo fieldInfo, BinaryReader reader)
|
||||
{
|
||||
switch (Type.GetTypeCode(fieldInfo.FieldType))
|
||||
{
|
||||
case TypeCode.SByte:
|
||||
fieldInfo.SetValue(obj, reader.ReadArray<sbyte>(arraySize));
|
||||
break;
|
||||
case TypeCode.Byte:
|
||||
fieldInfo.SetValue(obj, reader.ReadArray<byte>(arraySize));
|
||||
break;
|
||||
case TypeCode.Int16:
|
||||
fieldInfo.SetValue(obj, reader.ReadArray<short>(arraySize));
|
||||
break;
|
||||
case TypeCode.UInt16:
|
||||
fieldInfo.SetValue(obj, reader.ReadArray<ushort>(arraySize));
|
||||
break;
|
||||
case TypeCode.Int32:
|
||||
fieldInfo.SetValue(obj, reader.ReadArray<int>(arraySize));
|
||||
break;
|
||||
case TypeCode.UInt32:
|
||||
fieldInfo.SetValue(obj, reader.ReadArray<uint>(arraySize));
|
||||
break;
|
||||
case TypeCode.Int64:
|
||||
fieldInfo.SetValue(obj, reader.ReadArray<long>(arraySize));
|
||||
break;
|
||||
case TypeCode.UInt64:
|
||||
fieldInfo.SetValue(obj, reader.ReadArray<ulong>(arraySize));
|
||||
break;
|
||||
case TypeCode.Single:
|
||||
fieldInfo.SetValue(obj, reader.ReadArray<float>(arraySize));
|
||||
break;
|
||||
case TypeCode.String:
|
||||
string[] str = new string[arraySize];
|
||||
for (var i = 0; i < arraySize; ++i)
|
||||
str[i] = GetString(reader);
|
||||
fieldInfo.SetValue(obj, str);
|
||||
break;
|
||||
default:
|
||||
Log.outError(LogFilter.ServerLoading, "Wrong Array Type: {0}", fieldInfo.FieldType.Name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void SetValue(object obj, DB6FieldInfo fieldInfo, BinaryReader reader)
|
||||
{
|
||||
switch (Type.GetTypeCode(fieldInfo.FieldType))
|
||||
{
|
||||
case TypeCode.SByte:
|
||||
fieldInfo.SetValue(obj, reader.ReadSByte());
|
||||
break;
|
||||
case TypeCode.Byte:
|
||||
fieldInfo.SetValue(obj, reader.ReadByte());
|
||||
break;
|
||||
case TypeCode.Int16:
|
||||
fieldInfo.SetValue(obj, reader.ReadInt16());
|
||||
break;
|
||||
case TypeCode.UInt16:
|
||||
fieldInfo.SetValue(obj, reader.ReadUInt16());
|
||||
break;
|
||||
case TypeCode.Int32:
|
||||
fieldInfo.SetValue(obj, reader.ReadInt32());
|
||||
break;
|
||||
case TypeCode.UInt32:
|
||||
fieldInfo.SetValue(obj, reader.ReadUInt32());
|
||||
break;
|
||||
case TypeCode.Int64:
|
||||
fieldInfo.SetValue(obj, reader.ReadInt64());
|
||||
break;
|
||||
case TypeCode.UInt64:
|
||||
fieldInfo.SetValue(obj, reader.ReadUInt64());
|
||||
break;
|
||||
case TypeCode.Single:
|
||||
fieldInfo.SetValue(obj, reader.ReadSingle());
|
||||
break;
|
||||
case TypeCode.String:
|
||||
string str = GetString(reader);
|
||||
fieldInfo.SetValue(obj, str);
|
||||
break;
|
||||
case TypeCode.Object:
|
||||
switch (fieldInfo.FieldType.Name)
|
||||
{
|
||||
case "Vector2":
|
||||
fieldInfo.SetValue(obj, reader.Read<Vector2>());
|
||||
break;
|
||||
case "Vector3":
|
||||
fieldInfo.SetValue(obj, reader.Read<Vector3>());
|
||||
break;
|
||||
case "LocalizedString":
|
||||
LocalizedString locString = new LocalizedString();
|
||||
locString[Global.WorldMgr.GetDefaultDbcLocale()] = GetString(reader);
|
||||
fieldInfo.SetValue(obj, locString);
|
||||
break;
|
||||
default:
|
||||
Log.outError(LogFilter.ServerLoading, "Wrong Array Type: {0}", fieldInfo.FieldType.Name);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
Log.outError(LogFilter.ServerLoading, "Wrong Array Type: {0}", fieldInfo.FieldType.Name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static string GetString(BinaryReader reader)
|
||||
{
|
||||
if (StringTable != null)
|
||||
return StringTable.LookupByKey(reader.ReadUInt32());
|
||||
|
||||
return reader.ReadCString();
|
||||
}
|
||||
|
||||
static DB6Header Header;
|
||||
static Dictionary<int, string> StringTable;
|
||||
|
||||
static List<FieldStructureEntry> FieldStructure;
|
||||
static List<ColumnStructureEntry> ColumnMeta;
|
||||
static RelationShipData RelationShipData;
|
||||
}
|
||||
|
||||
public struct DB6FieldInfo
|
||||
{
|
||||
public DB6FieldInfo(FieldInfo fieldInfo)
|
||||
{
|
||||
IsArray = false;
|
||||
FieldType = fieldInfo.FieldType;
|
||||
|
||||
if (fieldInfo.FieldType.IsArray)
|
||||
{
|
||||
FieldType = fieldInfo.FieldType.GetElementType();
|
||||
IsArray = true;
|
||||
}
|
||||
|
||||
Setter = fieldInfo.CompileSetter();
|
||||
Getter = fieldInfo.CompileGetter();
|
||||
}
|
||||
|
||||
public void SetValue(Array array, object value, int arrayIndex)
|
||||
{
|
||||
array.SetValue(value, arrayIndex % array.Length);
|
||||
}
|
||||
|
||||
public void SetValue(object obj, object value)
|
||||
{
|
||||
Setter(obj, value);
|
||||
}
|
||||
|
||||
public Type FieldType;
|
||||
public bool IsArray;
|
||||
Action<object, object> Setter;
|
||||
public Func<object, object> Getter;
|
||||
}
|
||||
|
||||
public class DB6Header
|
||||
{
|
||||
public bool HasIndexTable()
|
||||
{
|
||||
return Convert.ToBoolean(Flags & HeaderFlags.IndexMap);
|
||||
}
|
||||
|
||||
public bool HasOffsetTable()
|
||||
{
|
||||
return Convert.ToBoolean(Flags & HeaderFlags.OffsetMap);
|
||||
}
|
||||
|
||||
public string Signature;
|
||||
public uint RecordCount;
|
||||
public uint FieldCount;
|
||||
public uint RecordSize;
|
||||
public uint StringTableSize;
|
||||
|
||||
public uint TableHash;
|
||||
public uint LayoutHash;
|
||||
public int MinId;
|
||||
public int MaxId;
|
||||
public int Locale;
|
||||
public int CopyTableSize;
|
||||
public HeaderFlags Flags;
|
||||
public int IdIndex;
|
||||
public uint TotalFieldCount;
|
||||
public uint BitpackedDataOffset;
|
||||
public uint LookupColumnCount;
|
||||
public uint OffsetTableOffset;
|
||||
public uint IdListSize;
|
||||
public uint ColumnMetaSize;
|
||||
public uint CommonDataSize;
|
||||
public uint PalletDataSize;
|
||||
public uint RelationshipDataSize;
|
||||
}
|
||||
|
||||
public class FieldStructureEntry
|
||||
{
|
||||
public short Bits;
|
||||
public ushort Offset;
|
||||
public int Length = 1;
|
||||
|
||||
public int ByteCount
|
||||
{
|
||||
get
|
||||
{
|
||||
int value = (32 - Bits) >> 3;
|
||||
return (value < 0 ? Math.Abs(value) + 4 : value);
|
||||
}
|
||||
}
|
||||
|
||||
public int BitCount
|
||||
{
|
||||
get
|
||||
{
|
||||
int bitSize = 32 - Bits;
|
||||
if (bitSize < 0)
|
||||
bitSize = (bitSize * -1) + 32;
|
||||
return bitSize;
|
||||
}
|
||||
}
|
||||
|
||||
public FieldStructureEntry(short bits, ushort offset)
|
||||
{
|
||||
this.Bits = bits;
|
||||
this.Offset = offset;
|
||||
}
|
||||
|
||||
public void SetLength(FieldStructureEntry nextField)
|
||||
{
|
||||
this.Length = Math.Max(1, (int)Math.Floor((nextField.Offset - this.Offset) / (double)this.ByteCount));
|
||||
}
|
||||
}
|
||||
|
||||
public class ColumnStructureEntry
|
||||
{
|
||||
public ushort RecordOffset { get; set; }
|
||||
public ushort Size { get; set; }
|
||||
public uint AdditionalDataSize { get; set; }
|
||||
public DB2ColumnCompression CompressionType { get; set; }
|
||||
public int BitOffset { get; set; } // used as common data column for Sparse
|
||||
public int BitWidth { get; set; }
|
||||
public int Cardinality { get; set; } // flags for Immediate, &1: Signed
|
||||
|
||||
public List<byte[]> PalletValues { get; set; }
|
||||
public Dictionary<int, byte[]> SparseValues { get; set; }
|
||||
public int ArraySize { get; set; } = 1;
|
||||
}
|
||||
|
||||
public class RelationShipData
|
||||
{
|
||||
public uint Records;
|
||||
public uint MinId;
|
||||
public uint MaxId;
|
||||
public Dictionary<uint, byte[]> Entries; // index, id
|
||||
}
|
||||
|
||||
struct OffsetDuplicate
|
||||
{
|
||||
public int HiddenIndex { get; set; }
|
||||
public int VisibleIndex { get; set; }
|
||||
|
||||
public OffsetDuplicate(int hidden, int visible)
|
||||
{
|
||||
this.HiddenIndex = hidden;
|
||||
this.VisibleIndex = visible;
|
||||
}
|
||||
}
|
||||
|
||||
public class LocalizedString
|
||||
{
|
||||
public bool HasString(LocaleConstant locale = SharedConst.DefaultLocale)
|
||||
{
|
||||
return !string.IsNullOrEmpty(stringStorage[(int)locale]);
|
||||
}
|
||||
|
||||
public string this[LocaleConstant locale]
|
||||
{
|
||||
get
|
||||
{
|
||||
return stringStorage[(int)locale] ?? "";
|
||||
}
|
||||
set
|
||||
{
|
||||
stringStorage[(int)locale] = value;
|
||||
}
|
||||
}
|
||||
|
||||
StringArray stringStorage = new StringArray((int)LocaleConstant.Total);
|
||||
}
|
||||
|
||||
public enum DB2ColumnCompression : uint
|
||||
{
|
||||
None,
|
||||
Immediate,
|
||||
CommonData,
|
||||
Pallet,
|
||||
PalletArray
|
||||
}
|
||||
|
||||
[Flags]
|
||||
public enum HeaderFlags : short
|
||||
{
|
||||
None = 0x0,
|
||||
OffsetMap = 0x1,
|
||||
SecondIndex = 0x2,
|
||||
IndexMap = 0x4,
|
||||
Unknown = 0x8,
|
||||
Compressed = 0x10,
|
||||
}
|
||||
}
|
||||
@@ -15,10 +15,71 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using Framework.Collections;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public class GameTableReader
|
||||
{
|
||||
internal static GameTable<T> Read<T>(string fileName) where T : new()
|
||||
{
|
||||
GameTable<T> storage = new GameTable<T>();
|
||||
|
||||
if (!File.Exists(CliDB.DataPath + fileName))
|
||||
{
|
||||
Log.outError(LogFilter.ServerLoading, "File {0} not found.", fileName);
|
||||
return storage;
|
||||
}
|
||||
using (var reader = new StreamReader(CliDB.DataPath + fileName))
|
||||
{
|
||||
string headers = reader.ReadLine();
|
||||
if (headers.IsEmpty())
|
||||
{
|
||||
Log.outError(LogFilter.ServerLoading, "GameTable file {0} is empty.", fileName);
|
||||
return storage;
|
||||
}
|
||||
|
||||
var columnDefs = new StringArray(headers, '\t');
|
||||
|
||||
List<T> data = new List<T>();
|
||||
data.Add(new T()); // row id 0, unused
|
||||
|
||||
string line;
|
||||
while (!(line = reader.ReadLine()).IsEmpty())
|
||||
{
|
||||
var values = new StringArray(line, '\t');
|
||||
if (values.Length == 0)
|
||||
break;
|
||||
|
||||
var obj = new T();
|
||||
var fields = obj.GetType().GetFields();
|
||||
for (int fieldIndex = 0, valueIndex = 1; fieldIndex < fields.Length && valueIndex < values.Length; ++fieldIndex, ++valueIndex)
|
||||
{
|
||||
var field = fields[fieldIndex];
|
||||
if (field.FieldType.IsArray)
|
||||
{
|
||||
Array array = (Array)field.GetValue(obj);
|
||||
for (var i = 0; i < array.Length; ++i)
|
||||
array.SetValue(float.Parse(values[valueIndex++]), i);
|
||||
}
|
||||
else
|
||||
fields[fieldIndex].SetValue(obj, float.Parse(values[valueIndex]));
|
||||
}
|
||||
|
||||
data.Add(obj);
|
||||
}
|
||||
|
||||
storage.SetData(data);
|
||||
}
|
||||
|
||||
CliDB.LoadedFileCount++;
|
||||
return storage;
|
||||
}
|
||||
}
|
||||
|
||||
public class GameTable<T> where T : new()
|
||||
{
|
||||
public T GetRow(uint row)
|
||||
|
||||
@@ -346,7 +346,7 @@ namespace Game.DataStorage
|
||||
}
|
||||
|
||||
foreach (PvpRewardRecord pvpReward in CliDB.PvpRewardStorage.Values)
|
||||
_pvpRewardPack[Tuple.Create(pvpReward.Prestige, pvpReward.HonorLevel)] = pvpReward.RewardPackID;
|
||||
_pvpRewardPack[Tuple.Create((uint)pvpReward.Prestige, (uint)pvpReward.HonorLevel)] = pvpReward.RewardPackID;
|
||||
|
||||
CliDB.PvpRewardStorage.Clear();
|
||||
|
||||
@@ -454,7 +454,7 @@ namespace Game.DataStorage
|
||||
CliDB.TransmogSetItemStorage.Clear();
|
||||
|
||||
foreach (WMOAreaTableRecord entry in CliDB.WMOAreaTableStorage.Values)
|
||||
_wmoAreaTableLookup[Tuple.Create(entry.WMOID, entry.NameSet, entry.WMOGroupID)] = entry;
|
||||
_wmoAreaTableLookup[Tuple.Create((short)entry.WMOID, entry.NameSet, entry.WMOGroupID)] = entry;
|
||||
|
||||
CliDB.WMOAreaTableStorage.Clear();
|
||||
|
||||
|
||||
@@ -25,8 +25,8 @@ namespace Game.DataStorage
|
||||
{
|
||||
public LocalizedString Title;
|
||||
public LocalizedString Description;
|
||||
public AchievementFlags Flags;
|
||||
public LocalizedString Reward;
|
||||
public AchievementFlags Flags;
|
||||
public short MapID;
|
||||
public ushort Supercedes;
|
||||
public ushort Category;
|
||||
@@ -37,7 +37,7 @@ namespace Game.DataStorage
|
||||
public byte MinimumCriteria;
|
||||
public uint Id;
|
||||
public uint IconFileDataID;
|
||||
public uint CriteriaTree;
|
||||
public ushort CriteriaTree;
|
||||
}
|
||||
|
||||
public sealed class AnimKitRecord
|
||||
@@ -51,17 +51,17 @@ namespace Game.DataStorage
|
||||
public sealed class AreaGroupMemberRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ushort AreaGroupID;
|
||||
public ushort AreaID;
|
||||
public uint AreaGroupID;
|
||||
}
|
||||
|
||||
public sealed class AreaTableRecord
|
||||
{
|
||||
public uint Id;
|
||||
public AreaFlags[] Flags = new AreaFlags[2];
|
||||
public string ZoneName;
|
||||
public float AmbientMultiplier;
|
||||
public LocalizedString AreaName;
|
||||
public AreaFlags[] Flags = new AreaFlags[2];
|
||||
public float AmbientMultiplier;
|
||||
public ushort MapId;
|
||||
public ushort ParentAreaID;
|
||||
public short AreaBit;
|
||||
@@ -80,7 +80,7 @@ namespace Game.DataStorage
|
||||
public byte WildBattlePetLevelMin;
|
||||
public byte WildBattlePetLevelMax;
|
||||
public byte WindSettingsID;
|
||||
public byte[] UWIntroSound = new byte[2];
|
||||
public byte UWIntroSound;
|
||||
|
||||
public bool IsSanctuary()
|
||||
{
|
||||
@@ -127,7 +127,7 @@ namespace Game.DataStorage
|
||||
public ushort SpecID;
|
||||
public byte ArtifactCategoryID;
|
||||
public byte Flags;
|
||||
public uint UiModelSceneID;
|
||||
public byte UiModelSceneID;
|
||||
public uint SpellVisualKitID;
|
||||
}
|
||||
|
||||
@@ -145,9 +145,9 @@ namespace Game.DataStorage
|
||||
public byte Flags;
|
||||
public byte ModifiesShapeshiftFormDisplay;
|
||||
public uint Id;
|
||||
public uint PlayerConditionID;
|
||||
public uint ItemAppearanceID;
|
||||
public uint AltItemAppearanceID;
|
||||
public ushort PlayerConditionID;
|
||||
public byte ItemAppearanceID;
|
||||
public byte AltItemAppearanceID;
|
||||
}
|
||||
|
||||
public sealed class ArtifactAppearanceSetRecord
|
||||
@@ -156,11 +156,11 @@ namespace Game.DataStorage
|
||||
public LocalizedString Name2;
|
||||
public ushort UiCameraID;
|
||||
public ushort AltHandUICameraID;
|
||||
public byte ArtifactID;
|
||||
public byte DisplayIndex;
|
||||
public byte AttachmentPoint;
|
||||
public byte Flags;
|
||||
public uint Id;
|
||||
public uint ArtifactID;
|
||||
}
|
||||
|
||||
public sealed class ArtifactCategoryRecord
|
||||
@@ -178,7 +178,7 @@ namespace Game.DataStorage
|
||||
public byte MaxRank;
|
||||
public byte ArtifactTier;
|
||||
public uint Id;
|
||||
public int RelicType;
|
||||
public byte RelicType;
|
||||
}
|
||||
|
||||
public sealed class ArtifactPowerLinkRecord
|
||||
@@ -191,7 +191,7 @@ namespace Game.DataStorage
|
||||
public sealed class ArtifactPowerPickerRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint PlayerConditionID;
|
||||
public ushort PlayerConditionID;
|
||||
}
|
||||
|
||||
public sealed class ArtifactPowerRankRecord
|
||||
@@ -199,9 +199,9 @@ namespace Game.DataStorage
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public float Value;
|
||||
public ushort ArtifactPowerID;
|
||||
public ushort Unknown;
|
||||
public byte Rank;
|
||||
public uint ArtifactPowerID;
|
||||
}
|
||||
|
||||
public sealed class ArtifactQuestXPRecord
|
||||
|
||||
@@ -54,41 +54,41 @@ namespace Game.DataStorage
|
||||
{
|
||||
public uint Id;
|
||||
public short Value;
|
||||
public byte BreedID;
|
||||
public byte State;
|
||||
public uint BreedID;
|
||||
}
|
||||
|
||||
public sealed class BattlePetSpeciesRecord
|
||||
{
|
||||
public LocalizedString SourceText;
|
||||
public LocalizedString Description;
|
||||
public uint CreatureID;
|
||||
public uint IconFileID;
|
||||
public uint SummonSpellID;
|
||||
public LocalizedString SourceText;
|
||||
public LocalizedString Description;
|
||||
public ushort Flags;
|
||||
public byte PetType;
|
||||
public sbyte Source;
|
||||
public uint Id;
|
||||
public uint CardModelSceneID;
|
||||
public uint LoadoutModelSceneID;
|
||||
public byte CardModelSceneID;
|
||||
public byte LoadoutModelSceneID;
|
||||
}
|
||||
|
||||
public sealed class BattlePetSpeciesStateRecord
|
||||
{
|
||||
public uint Id;
|
||||
public int Value;
|
||||
public ushort SpeciesID;
|
||||
public byte State;
|
||||
public uint SpeciesID;
|
||||
}
|
||||
|
||||
public sealed class BattlemasterListRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
public uint IconFileDataID;
|
||||
public LocalizedString GameType;
|
||||
public LocalizedString ShortDescription;
|
||||
public LocalizedString LongDescription;
|
||||
public uint IconFileDataID;
|
||||
public short[] MapId = new short[16];
|
||||
public ushort HolidayWorldState;
|
||||
public ushort PlayerConditionId;
|
||||
@@ -113,7 +113,7 @@ namespace Game.DataStorage
|
||||
public ushort UnkEmoteID;
|
||||
public byte Language;
|
||||
public byte Type;
|
||||
public uint[] SoundID = new uint[2];
|
||||
public uint PlayerConditionID;
|
||||
public uint[] SoundID = new uint[2];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,11 +54,11 @@ namespace Game.DataStorage
|
||||
public uint Id;
|
||||
public int[] ItemID = new int[24];
|
||||
public uint PetDisplayID;
|
||||
public byte RaceID;
|
||||
public byte ClassID;
|
||||
public byte GenderID;
|
||||
public byte OutfitID;
|
||||
public byte PetFamilyID;
|
||||
public uint RaceID;
|
||||
}
|
||||
|
||||
public sealed class CharTitlesRecord
|
||||
@@ -73,9 +73,9 @@ namespace Game.DataStorage
|
||||
public sealed class ChatChannelsRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ChannelDBCFlags Flags;
|
||||
public LocalizedString Name;
|
||||
public LocalizedString Shortcut;
|
||||
public ChannelDBCFlags Flags;
|
||||
public byte FactionGroup;
|
||||
}
|
||||
|
||||
@@ -90,6 +90,7 @@ namespace Game.DataStorage
|
||||
public uint SelectScreenFileDataID;
|
||||
public uint IconFileDataID;
|
||||
public uint LowResScreenFileDataID;
|
||||
public uint StartingLevel;
|
||||
public ushort Flags;
|
||||
public ushort CinematicSequenceID;
|
||||
public ushort DefaultSpec;
|
||||
@@ -105,28 +106,28 @@ namespace Game.DataStorage
|
||||
public sealed class ChrClassesXPowerTypesRecord
|
||||
{
|
||||
public uint Id;
|
||||
public byte ClassID;
|
||||
public byte PowerType;
|
||||
public uint ClassID;
|
||||
}
|
||||
|
||||
public sealed class ChrRacesRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint Flags;
|
||||
public uint MaleDisplayID;
|
||||
public uint FemaleDisplayID;
|
||||
public uint ClientPrefix;
|
||||
public uint ClientFileString;
|
||||
public LocalizedString Name;
|
||||
public LocalizedString NameFemale;
|
||||
public LocalizedString NameMale;
|
||||
public string[] FacialHairCustomization = new string[2];
|
||||
public string HairCustomization;
|
||||
public string NameFemale;
|
||||
public string LowercaseName;
|
||||
public string LowercaseNameFemale;
|
||||
public uint Flags;
|
||||
public uint MaleDisplayID;
|
||||
public uint FemaleDisplayID;
|
||||
public uint CreateScreenFileDataID;
|
||||
public uint SelectScreenFileDataID;
|
||||
public uint[] MaleCustomizeOffset = new uint[3];
|
||||
public uint[] FemaleCustomizeOffset = new uint[3];
|
||||
public uint LowResScreenFileDataID;
|
||||
public uint StartingLevel;
|
||||
public uint UIDisplayOrder;
|
||||
public ushort FactionID;
|
||||
public ushort ResSicknessSpellID;
|
||||
public ushort SplashSoundID;
|
||||
@@ -141,18 +142,22 @@ namespace Game.DataStorage
|
||||
public byte NeutralRaceID;
|
||||
public byte ItemAppearanceFrameRaceID;
|
||||
public byte CharComponentTexLayoutHiResID;
|
||||
public uint Id;
|
||||
public uint HighResMaleDisplayID;
|
||||
public uint HighResFemaleDisplayID;
|
||||
public uint HeritageArmorAchievementID;
|
||||
public uint MaleCorpseBonesModelFileDataID;
|
||||
public uint FemaleCorpseBonesModelFileDataID;
|
||||
public uint[] AlteredFormTransitionSpellVisualID = new uint[3];
|
||||
public uint[] AlteredFormTransitionSpellVisualKitID = new uint[3];
|
||||
}
|
||||
|
||||
public sealed class ChrSpecializationRecord
|
||||
{
|
||||
public string Name;
|
||||
public string Name2;
|
||||
public string Description;
|
||||
public uint[] MasterySpellID = new uint[PlayerConst.MaxMasterySpells];
|
||||
public LocalizedString Name;
|
||||
public LocalizedString Name2;
|
||||
public LocalizedString Description;
|
||||
public byte ClassID;
|
||||
public byte OrderIndex;
|
||||
public byte PetTalentType;
|
||||
@@ -208,7 +213,6 @@ namespace Game.DataStorage
|
||||
public byte Flags;
|
||||
public sbyte Gender;
|
||||
public uint ExtendedDisplayInfoID;
|
||||
public uint[] TextureVariation = new uint[3];
|
||||
public uint PortraitTextureFileDataID;
|
||||
public byte CreatureModelAlpha;
|
||||
public ushort SoundID;
|
||||
@@ -223,6 +227,7 @@ namespace Game.DataStorage
|
||||
public uint StateSpellVisualKitID;
|
||||
public float InstanceOtherPlayerPetScale; // scale of not own player pets inside dungeons/raids/scenarios
|
||||
public uint MountSpellVisualKitID;
|
||||
public uint[] TextureVariation = new uint[3];
|
||||
}
|
||||
|
||||
public sealed class CreatureDisplayInfoExtraRecord
|
||||
@@ -245,9 +250,9 @@ namespace Game.DataStorage
|
||||
public sealed class CreatureFamilyRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
public float MinScale;
|
||||
public float MaxScale;
|
||||
public LocalizedString Name;
|
||||
public uint IconFileDataID;
|
||||
public ushort[] SkillLine = new ushort[2];
|
||||
public ushort PetFoodMask;
|
||||
@@ -280,12 +285,12 @@ namespace Game.DataStorage
|
||||
public float HoverHeight;
|
||||
public uint Flags;
|
||||
public uint FileDataID;
|
||||
public uint SizeClass;
|
||||
public byte SizeClass;
|
||||
public uint BloodID;
|
||||
public uint FootprintTextureID;
|
||||
public uint FoleyMaterialID;
|
||||
public uint FootstepEffectID;
|
||||
public uint DeathThudEffectID;
|
||||
public byte FootprintTextureID;
|
||||
public byte FoleyMaterialID;
|
||||
public byte FootstepEffectID;
|
||||
public byte DeathThudEffectID;
|
||||
public uint SoundID;
|
||||
public uint CreatureGeosetDataID;
|
||||
}
|
||||
@@ -316,23 +321,23 @@ namespace Game.DataStorage
|
||||
public sealed class CriteriaTreeRecord
|
||||
{
|
||||
public uint Id;
|
||||
public string Description;
|
||||
public uint Amount;
|
||||
public LocalizedString Description;
|
||||
public CriteriaTreeFlags Flags;
|
||||
public byte Operator;
|
||||
public uint CriteriaID;
|
||||
public uint Parent;
|
||||
public ushort CriteriaID;
|
||||
public ushort Parent;
|
||||
public int OrderIndex;
|
||||
}
|
||||
|
||||
public sealed class CurrencyTypesRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
public string Name;
|
||||
public string Description;
|
||||
public uint MaxQty;
|
||||
public uint MaxEarnablePerWeek;
|
||||
public CurrencyFlags Flags;
|
||||
public LocalizedString Description;
|
||||
public byte CategoryID;
|
||||
public byte SpellCategory;
|
||||
public byte Quality;
|
||||
|
||||
@@ -20,15 +20,15 @@ namespace Game.DataStorage
|
||||
public sealed class EmotesRecord
|
||||
{
|
||||
public uint Id;
|
||||
public long RaceMask;
|
||||
public uint EmoteSlashCommand;
|
||||
public uint SpellVisualKitID;
|
||||
public uint EmoteFlags;
|
||||
public int RaceMask;
|
||||
public ushort AnimID;
|
||||
public byte EmoteSpecProc;
|
||||
public uint EmoteSpecProcParam;
|
||||
public uint EmoteSoundID;
|
||||
public int ClassMask;
|
||||
public byte EmoteSoundID;
|
||||
public short ClassMask;
|
||||
}
|
||||
|
||||
public sealed class EmotesTextRecord
|
||||
@@ -41,10 +41,10 @@ namespace Game.DataStorage
|
||||
public sealed class EmotesTextSoundRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ushort EmotesTextId;
|
||||
public byte RaceId;
|
||||
public byte SexId;
|
||||
public byte ClassId;
|
||||
public uint SoundId;
|
||||
public uint EmotesTextId;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,13 +22,13 @@ namespace Game.DataStorage
|
||||
{
|
||||
public sealed class FactionRecord
|
||||
{
|
||||
public ulong[] ReputationRaceMask = new ulong[4];
|
||||
public LocalizedString Name;
|
||||
public string Description;
|
||||
public uint Id;
|
||||
public uint[] ReputationRaceMask = new uint[4];
|
||||
public int[] ReputationBase = new int[4];
|
||||
public float ParentFactionModIn; // Faction gains incoming rep * ParentFactionModIn
|
||||
public float ParentFactionModOut; // Faction outputs rep * ParentFactionModOut as spillover reputation
|
||||
public LocalizedString Name;
|
||||
public LocalizedString Description;
|
||||
public uint[] ReputationMax = new uint[4];
|
||||
public short ReputationIndex;
|
||||
public ushort[] ReputationClassMask = new ushort[4];
|
||||
|
||||
@@ -22,6 +22,7 @@ namespace Game.DataStorage
|
||||
{
|
||||
public sealed class GameObjectsRecord
|
||||
{
|
||||
public LocalizedString Name;
|
||||
public Vector3 Position;
|
||||
public float RotationX;
|
||||
public float RotationY;
|
||||
@@ -29,7 +30,6 @@ namespace Game.DataStorage
|
||||
public float RotationW;
|
||||
public float Size;
|
||||
public int[] Data = new int[8];
|
||||
public LocalizedString Name;
|
||||
public ushort MapID;
|
||||
public ushort DisplayID;
|
||||
public ushort PhaseID;
|
||||
@@ -65,12 +65,12 @@ namespace Game.DataStorage
|
||||
public sealed class GarrBuildingRecord
|
||||
{
|
||||
public uint Id;
|
||||
public string NameAlliance;
|
||||
public string NameHorde;
|
||||
public string Description;
|
||||
public string Tooltip;
|
||||
public uint HordeGameObjectID;
|
||||
public uint AllianceGameObjectID;
|
||||
public LocalizedString NameAlliance;
|
||||
public LocalizedString NameHorde;
|
||||
public LocalizedString Description;
|
||||
public LocalizedString Tooltip;
|
||||
public uint IconFileDataID;
|
||||
public ushort CostCurrencyID;
|
||||
public ushort HordeTexPrefixKitID;
|
||||
@@ -86,9 +86,9 @@ namespace Game.DataStorage
|
||||
public GarrisonBuildingFlags Flags;
|
||||
public byte MaxShipments;
|
||||
public byte GarrTypeID;
|
||||
public int BuildDuration;
|
||||
public ushort BuildDuration;
|
||||
public int CostCurrencyAmount;
|
||||
public int BonusAmount;
|
||||
public byte BonusAmount;
|
||||
}
|
||||
|
||||
public sealed class GarrBuildingPlotInstRecord
|
||||
@@ -114,15 +114,15 @@ namespace Game.DataStorage
|
||||
|
||||
public sealed class GarrFollowerRecord
|
||||
{
|
||||
public string HordeSourceText;
|
||||
public string AllianceSourceText;
|
||||
public string Name;
|
||||
public uint HordeCreatureID;
|
||||
public uint AllianceCreatureID;
|
||||
public LocalizedString HordeSourceText;
|
||||
public LocalizedString AllianceSourceText;
|
||||
public uint HordePortraitIconID;
|
||||
public uint AlliancePortraitIconID;
|
||||
public uint HordeAddedBroadcastTextID;
|
||||
public uint AllianceAddedBroadcastTextID;
|
||||
public LocalizedString Name;
|
||||
public ushort HordeGarrFollItemSetID;
|
||||
public ushort AllianceGarrFollItemSetID;
|
||||
public ushort ItemLevelWeapon;
|
||||
@@ -151,9 +151,9 @@ namespace Game.DataStorage
|
||||
public sealed class GarrFollowerXAbilityRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ushort GarrFollowerID;
|
||||
public ushort GarrAbilityID;
|
||||
public byte FactionIndex;
|
||||
public uint GarrFollowerID;
|
||||
}
|
||||
|
||||
public sealed class GarrPlotRecord
|
||||
@@ -165,8 +165,7 @@ namespace Game.DataStorage
|
||||
public byte GarrPlotUICategoryID;
|
||||
public byte PlotType;
|
||||
public byte Flags;
|
||||
public uint MinCount;
|
||||
public uint MaxCount;
|
||||
public uint[] Count = new uint[2];
|
||||
}
|
||||
|
||||
public sealed class GarrPlotBuildingRecord
|
||||
@@ -218,7 +217,7 @@ namespace Game.DataStorage
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public ushort GlyphPropertiesID;
|
||||
public uint GlyphPropertiesID;
|
||||
}
|
||||
|
||||
public sealed class GlyphPropertiesRecord
|
||||
@@ -233,14 +232,13 @@ namespace Game.DataStorage
|
||||
public sealed class GlyphRequiredSpecRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ushort GlyphPropertiesID;
|
||||
public ushort ChrSpecializationID;
|
||||
public uint GlyphPropertiesID;
|
||||
}
|
||||
|
||||
public sealed class GuildColorBackgroundRecord
|
||||
{
|
||||
public uint Id;
|
||||
|
||||
public byte Red;
|
||||
public byte Green;
|
||||
public byte Blue;
|
||||
|
||||
@@ -21,8 +21,8 @@ namespace Game.DataStorage
|
||||
{
|
||||
public sealed class HeirloomRecord
|
||||
{
|
||||
public string SourceText;
|
||||
public uint ItemID;
|
||||
public LocalizedString SourceText;
|
||||
public uint[] OldItem = new uint[2];
|
||||
public uint NextDifficultyItemID;
|
||||
public uint[] UpgradeItemID = new uint[3];
|
||||
@@ -43,8 +43,8 @@ namespace Game.DataStorage
|
||||
public byte Priority;
|
||||
public sbyte CalendarFilterType;
|
||||
public byte Flags;
|
||||
public uint HolidayNameID;
|
||||
public uint HolidayDescriptionID;
|
||||
public ushort HolidayNameID;
|
||||
public ushort HolidayDescriptionID;
|
||||
public int[] TextureFileDataID = new int[3];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,7 +98,7 @@ namespace Game.DataStorage
|
||||
public sealed class ItemBonusRecord
|
||||
{
|
||||
public uint Id;
|
||||
public int[] Value = new int[2];
|
||||
public int[] Value = new int[3];
|
||||
public ushort BonusListID;
|
||||
public ItemBonusType Type;
|
||||
public byte Index;
|
||||
@@ -113,26 +113,26 @@ namespace Game.DataStorage
|
||||
public sealed class ItemBonusTreeNodeRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ushort BonusTreeID;
|
||||
public ushort SubTreeID;
|
||||
public ushort BonusListID;
|
||||
public ushort ItemLevelSelectorID;
|
||||
public byte BonusTreeModID;
|
||||
public uint BonusTreeID;
|
||||
}
|
||||
|
||||
public sealed class ItemChildEquipmentRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint ItemID;
|
||||
public uint AltItemID;
|
||||
public byte AltEquipmentSlot;
|
||||
public uint ItemID;
|
||||
}
|
||||
|
||||
public sealed class ItemClassRecord
|
||||
{
|
||||
public uint Id;
|
||||
public string Name;
|
||||
public float PriceMod;
|
||||
public LocalizedString Name;
|
||||
public byte OldEnumValue;
|
||||
public byte Flags;
|
||||
}
|
||||
@@ -165,15 +165,15 @@ namespace Game.DataStorage
|
||||
public ushort MinItemLevel;
|
||||
public ushort MaxItemLevel;
|
||||
public ushort RequiredDisenchantSkill;
|
||||
public byte ItemClass;
|
||||
public sbyte ItemSubClass;
|
||||
public byte ItemQuality;
|
||||
public sbyte Expansion;
|
||||
public uint ItemClass;
|
||||
}
|
||||
|
||||
public sealed class ItemEffectRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint ItemID;
|
||||
public uint SpellID;
|
||||
public int Cooldown;
|
||||
public int CategoryCooldown;
|
||||
@@ -182,6 +182,7 @@ namespace Game.DataStorage
|
||||
public ushort ChrSpecializationID;
|
||||
public byte OrderIndex;
|
||||
public ItemSpelltriggerType Trigger;
|
||||
public uint ItemID;
|
||||
}
|
||||
|
||||
public sealed class ItemExtendedCostRecord
|
||||
@@ -210,8 +211,8 @@ namespace Game.DataStorage
|
||||
{
|
||||
public uint ID;
|
||||
public uint ItemBonusListID;
|
||||
public ushort ItemLevelSelectorQualitySetID;
|
||||
public byte Quality;
|
||||
public uint ItemLevelSelectorQualitySetID;
|
||||
}
|
||||
|
||||
public sealed class ItemLevelSelectorQualitySetRecord
|
||||
@@ -232,11 +233,11 @@ namespace Game.DataStorage
|
||||
public sealed class ItemModifiedAppearanceRecord
|
||||
{
|
||||
public uint ItemID;
|
||||
public ushort AppearanceID;
|
||||
public uint Id;
|
||||
public byte AppearanceModID;
|
||||
public ushort AppearanceID;
|
||||
public byte Index;
|
||||
public byte SourceType;
|
||||
public uint Id;
|
||||
}
|
||||
|
||||
public sealed class ItemPriceBaseRecord
|
||||
@@ -264,17 +265,17 @@ namespace Game.DataStorage
|
||||
|
||||
public sealed class ItemSearchNameRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ulong AllowableRace;
|
||||
public LocalizedString Name;
|
||||
public uint Id;
|
||||
public uint[] Flags = new uint[3];
|
||||
public uint AllowableRace;
|
||||
public ushort ItemLevel;
|
||||
public byte Quality;
|
||||
public byte RequiredExpansion;
|
||||
public byte RequiredLevel;
|
||||
public int AllowableClass;
|
||||
public ushort RequiredReputationFaction;
|
||||
public byte RequiredReputationRank;
|
||||
public short AllowableClass;
|
||||
public ushort RequiredSkill;
|
||||
public ushort RequiredSkillRank;
|
||||
public uint RequiredSpell;
|
||||
@@ -286,7 +287,7 @@ namespace Game.DataStorage
|
||||
public LocalizedString Name;
|
||||
public uint[] ItemID = new uint[17];
|
||||
public ushort RequiredSkillRank;
|
||||
public uint RequiredSkill;
|
||||
public byte RequiredSkill;
|
||||
public ItemSetFlags Flags;
|
||||
}
|
||||
|
||||
@@ -294,34 +295,34 @@ namespace Game.DataStorage
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public ushort ItemSetID;
|
||||
public ushort ChrSpecID;
|
||||
public byte Threshold;
|
||||
public uint ItemSetID;
|
||||
}
|
||||
|
||||
public sealed class ItemSparseRecord
|
||||
{
|
||||
public uint Id;
|
||||
public long AllowableRace;
|
||||
public LocalizedString Name;
|
||||
public string Name2;
|
||||
public string Name3;
|
||||
public string Name4;
|
||||
public string Description;
|
||||
public uint[] Flags = new uint[4];
|
||||
public float Unk1;
|
||||
public float Unk2;
|
||||
public uint BuyCount;
|
||||
public uint BuyPrice;
|
||||
public uint SellPrice;
|
||||
public int AllowableRace;
|
||||
public uint RequiredSpell;
|
||||
public uint MaxCount;
|
||||
public uint Stackable;
|
||||
public int[] ItemStatAllocation = new int[ItemConst.MaxStats];
|
||||
public float[] ItemStatSocketCostMultiplier = new float[ItemConst.MaxStats];
|
||||
public float RangedModRange;
|
||||
public LocalizedString Name;
|
||||
public LocalizedString Name2;
|
||||
public LocalizedString Name3;
|
||||
public LocalizedString Name4;
|
||||
public LocalizedString Description;
|
||||
public uint BagFamily;
|
||||
public float ArmorDamageModifier;
|
||||
public float ArmorDamageModifier;//wrong?
|
||||
public uint Duration;
|
||||
public float StatScalingFactor;
|
||||
public short AllowableClass;
|
||||
@@ -382,8 +383,8 @@ namespace Game.DataStorage
|
||||
public sealed class ItemSpecOverrideRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint ItemID;
|
||||
public ushort SpecID;
|
||||
public uint ItemID;
|
||||
}
|
||||
|
||||
public sealed class ItemUpgradeRecord
|
||||
@@ -399,7 +400,7 @@ namespace Game.DataStorage
|
||||
public sealed class ItemXBonusTreeRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint ItemID;
|
||||
public ushort BonusTreeID;
|
||||
public uint ItemID;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,8 +24,8 @@ namespace Game.DataStorage
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
public string Description;
|
||||
public LfgFlags Flags;
|
||||
public LocalizedString Description;
|
||||
public float MinItemLevel;
|
||||
public ushort MaxLevel;
|
||||
public ushort TargetLevelMax;
|
||||
@@ -35,7 +35,7 @@ namespace Game.DataStorage
|
||||
public ushort LastBossJournalEncounterID;
|
||||
public ushort BonusReputationAmount;
|
||||
public ushort MentorItemLevel;
|
||||
public uint PlayerConditionID;
|
||||
public ushort PlayerConditionID;
|
||||
public byte MinLevel;
|
||||
public byte TargetLevel;
|
||||
public byte TargetLevelMin;
|
||||
@@ -75,13 +75,13 @@ namespace Game.DataStorage
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
public string[] Texture = new string[6];
|
||||
public uint SpellID;
|
||||
public float MaxDarkenDepth;
|
||||
public float FogDarkenIntensity;
|
||||
public float AmbDarkenIntensity;
|
||||
public float DirDarkenIntensity;
|
||||
public float ParticleScale;
|
||||
public string[] Texture = new string[6];
|
||||
public uint[] Color = new uint[2];
|
||||
public float[] Float = new float[18];
|
||||
public uint[] Int = new uint[4];
|
||||
@@ -92,7 +92,7 @@ namespace Game.DataStorage
|
||||
public byte ParticleTexSlots;
|
||||
public byte MaterialID;
|
||||
public byte[] DepthTexCount = new byte[6];
|
||||
public uint SoundID;
|
||||
public ushort SoundID;
|
||||
}
|
||||
|
||||
public sealed class LockRecord
|
||||
|
||||
@@ -37,6 +37,7 @@ namespace Game.DataStorage
|
||||
|
||||
struct M2Header
|
||||
{
|
||||
/*
|
||||
public M2Header(BinaryReader reader)
|
||||
{
|
||||
Magic = null;/// reader.ReadStringFromChars(4);
|
||||
@@ -108,6 +109,7 @@ namespace Game.DataStorage
|
||||
nBlendMaps = reader.ReadUInt32();
|
||||
ofsBlendMaps = reader.ReadUInt32();
|
||||
}
|
||||
*/
|
||||
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
|
||||
public char[] Magic; // "MD20"
|
||||
|
||||
@@ -29,16 +29,15 @@ namespace Game.DataStorage
|
||||
public sealed class MapRecord
|
||||
{
|
||||
public uint Id;
|
||||
|
||||
public uint Directory;
|
||||
public LocalizedString MapName;
|
||||
public string MapDescription0; // Horde
|
||||
public string MapDescription1; // Alliance
|
||||
public string ShortDescription;
|
||||
public string LongDescription;
|
||||
public MapFlags[] Flags = new MapFlags[2];
|
||||
public float MinimapIconScale;
|
||||
public Vector2 CorpsePos; // entrance coordinates in ghost mode (in most cases = normal entrance)
|
||||
public LocalizedString MapName;
|
||||
public LocalizedString MapDescription0; // Horde
|
||||
public LocalizedString MapDescription1; // Alliance
|
||||
public LocalizedString ShortDescription;
|
||||
public LocalizedString LongDescription;
|
||||
public ushort AreaTableID;
|
||||
public ushort LoadingScreenID;
|
||||
public short CorpseMapID; // map_id of entrance map in ghost mode (continent always and in most cases = normal entrance)
|
||||
@@ -95,7 +94,6 @@ namespace Game.DataStorage
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Message_lang; // m_message_lang (text showed when transfer to map failed)
|
||||
public ushort MapID;
|
||||
public byte DifficultyID;
|
||||
public byte RaidDurationType; // 1 means daily reset, 2 means weekly
|
||||
public byte MaxPlayers; // m_maxPlayers some heroic versions have 0 when expected same amount as in normal version
|
||||
@@ -103,6 +101,7 @@ namespace Game.DataStorage
|
||||
public byte Flags;
|
||||
public byte ItemBonusTreeModID;
|
||||
public uint Context;
|
||||
public uint MapID;
|
||||
|
||||
public uint GetRaidDuration()
|
||||
{
|
||||
@@ -127,17 +126,17 @@ namespace Game.DataStorage
|
||||
|
||||
public sealed class MountRecord
|
||||
{
|
||||
public string Name;
|
||||
public string Description;
|
||||
public string SourceDescription;
|
||||
public uint SpellId;
|
||||
public LocalizedString Name;
|
||||
public LocalizedString Description;
|
||||
public LocalizedString SourceDescription;
|
||||
public float CameraPivotMultiplier;
|
||||
public ushort MountTypeId;
|
||||
public ushort Flags;
|
||||
public byte Source;
|
||||
public uint Id;
|
||||
public uint PlayerConditionId;
|
||||
public int UiModelSceneID;
|
||||
public byte UiModelSceneID;
|
||||
}
|
||||
|
||||
public sealed class MountCapabilityRecord
|
||||
@@ -149,7 +148,7 @@ namespace Game.DataStorage
|
||||
public short RequiredMap;
|
||||
public MountCapabilityFlags Flags;
|
||||
public uint Id;
|
||||
public uint RequiredAura;
|
||||
public byte RequiredAura;
|
||||
}
|
||||
|
||||
public sealed class MountTypeXCapabilityRecord
|
||||
@@ -162,10 +161,10 @@ namespace Game.DataStorage
|
||||
|
||||
public sealed class MountXDisplayRecord
|
||||
{
|
||||
public uint ID;
|
||||
public uint MountID;
|
||||
public uint Id;
|
||||
public uint DisplayID;
|
||||
public uint PlayerConditionID;
|
||||
public uint MountID;
|
||||
}
|
||||
|
||||
public sealed class MovieRecord
|
||||
|
||||
@@ -30,48 +30,24 @@ namespace Game.DataStorage
|
||||
{
|
||||
public uint Id;
|
||||
public ushort PhaseId;
|
||||
public ushort PhaseGroupID;
|
||||
public uint PhaseGroupID;
|
||||
}
|
||||
|
||||
public sealed class PlayerConditionRecord
|
||||
{
|
||||
public long RaceMask;
|
||||
public string FailureDescription;
|
||||
public uint Id;
|
||||
public uint RaceMask;
|
||||
public uint[] Time = new uint[2];
|
||||
public uint[] AuraSpellID = new uint[4];
|
||||
public LocalizedString FailureDescription;
|
||||
public ushort[] SkillID = new ushort[4];
|
||||
public short[] MinSkill = new short[4];
|
||||
public short[] MaxSkill = new short[4];
|
||||
public ushort[] PrevQuestID = new ushort[4];
|
||||
public ushort[] CurrQuestID = new ushort[4];
|
||||
public ushort[] CurrentCompletedQuestID = new ushort[4];
|
||||
public ushort[] Explored = new ushort[2];
|
||||
public ushort[] Achievement = new ushort[4];
|
||||
public ushort[] AreaID = new ushort[4];
|
||||
public byte Flags;
|
||||
public byte[] MinReputation = new byte[3];
|
||||
public byte[] AuraCount = new byte[4];
|
||||
public byte[] LfgStatus = new byte[4];
|
||||
public byte[] LfgCompare = new byte[4];
|
||||
public byte[] CurrencyCount = new byte[4];
|
||||
public int ClassMask;
|
||||
public uint[] MinFactionID = new uint[3];
|
||||
public uint[] SpellID = new uint[4];
|
||||
public uint[] ItemID = new uint[4];
|
||||
public uint[] ItemCount = new uint[4];
|
||||
public uint[] LfgValue = new uint[4];
|
||||
public uint[] CurrencyID = new uint[4];
|
||||
public uint[] QuestKillMonster = new uint[6];
|
||||
public int[] MovementFlags = new int[2];
|
||||
public ushort MinLevel;
|
||||
public ushort MaxLevel;
|
||||
public int ClassMask;
|
||||
public sbyte Gender;
|
||||
public sbyte NativeGender;
|
||||
public uint SkillLogic;
|
||||
public byte LanguageID;
|
||||
public byte MinLanguage;
|
||||
public uint MaxLanguage;
|
||||
public int MaxLanguage;
|
||||
public ushort MaxFactionID;
|
||||
public byte MaxReputation;
|
||||
public uint ReputationLogic;
|
||||
@@ -105,17 +81,41 @@ namespace Game.DataStorage
|
||||
public byte PhaseUseFlags;
|
||||
public ushort PhaseID;
|
||||
public uint PhaseGroupID;
|
||||
public uint MinAvgItemLevel;
|
||||
public uint MaxAvgItemLevel;
|
||||
public int MinAvgItemLevel;
|
||||
public int MaxAvgItemLevel;
|
||||
public ushort MinAvgEquippedItemLevel;
|
||||
public ushort MaxAvgEquippedItemLevel;
|
||||
public sbyte ChrSpecializationIndex;
|
||||
public sbyte ChrSpecializationRole;
|
||||
public sbyte PowerType;
|
||||
public sbyte PowerTypeComp;
|
||||
public sbyte PowerTypeValue;
|
||||
public byte PowerTypeComp;
|
||||
public byte PowerTypeValue;
|
||||
public uint ModifierTreeID;
|
||||
public uint MainHandItemSubclassMask;
|
||||
public int MainHandItemSubclassMask;
|
||||
public ushort[] SkillID = new ushort[4];
|
||||
public short[] MinSkill = new short[4];
|
||||
public short[] MaxSkill = new short[4];
|
||||
public uint[] MinFactionID = new uint[3];
|
||||
public byte[] MinReputation = new byte[3];
|
||||
public ushort[] PrevQuestID = new ushort[4];
|
||||
public ushort[] CurrQuestID = new ushort[4];
|
||||
public ushort[] CurrentCompletedQuestID = new ushort[4];
|
||||
public uint[] SpellID = new uint[4];
|
||||
public uint[] ItemID = new uint[4];
|
||||
public uint[] ItemCount = new uint[4];
|
||||
public ushort[] Explored = new ushort[2];
|
||||
public uint[] Time = new uint[2];
|
||||
public uint[] AuraSpellID = new uint[4];
|
||||
public byte[] AuraCount = new byte[4];
|
||||
public ushort[] Achievement = new ushort[4];
|
||||
public byte[] LfgStatus = new byte[4];
|
||||
public byte[] LfgCompare = new byte[4];
|
||||
public uint[] LfgValue = new uint[4];
|
||||
public ushort[] AreaID = new ushort[4];
|
||||
public uint[] CurrencyID = new uint[4];
|
||||
public byte[] CurrencyCount = new byte[4];
|
||||
public uint[] QuestKillMonster = new uint[6];
|
||||
public int[] MovementFlags = new int[2];
|
||||
}
|
||||
|
||||
public sealed class PowerDisplayRecord
|
||||
@@ -147,9 +147,9 @@ namespace Game.DataStorage
|
||||
|
||||
public sealed class PrestigeLevelInfoRecord
|
||||
{
|
||||
public uint ID;
|
||||
public uint Id;
|
||||
public string PrestigeText;
|
||||
public uint IconID;
|
||||
public LocalizedString PrestigeText;
|
||||
public byte PrestigeLevel;
|
||||
public PrestigeLevelInfoFlags Flags;
|
||||
|
||||
@@ -159,10 +159,10 @@ namespace Game.DataStorage
|
||||
public sealed class PVPDifficultyRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ushort MapID;
|
||||
public byte BracketID;
|
||||
public byte MinLevel;
|
||||
public byte MaxLevel;
|
||||
public uint MapID;
|
||||
|
||||
// helpers
|
||||
public BattlegroundBracketId GetBracketId() { return (BattlegroundBracketId)BracketID; }
|
||||
@@ -171,8 +171,8 @@ namespace Game.DataStorage
|
||||
public sealed class PvpRewardRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint HonorLevel;
|
||||
public uint Prestige;
|
||||
public uint RewardPackID;
|
||||
public byte HonorLevel;
|
||||
public byte Prestige;
|
||||
public ushort RewardPackID;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,16 +32,16 @@ namespace Game.DataStorage
|
||||
public float ArtifactXPMultiplier;
|
||||
public byte ArtifactXPDifficulty;
|
||||
public byte ArtifactCategoryID;
|
||||
public uint TitleID;
|
||||
public uint Unused;
|
||||
public ushort TitleID;
|
||||
public ushort Unused;
|
||||
}
|
||||
|
||||
public sealed class RewardPackXItemRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint ItemID;
|
||||
public uint RewardPackID;
|
||||
public uint Amount;
|
||||
public uint RewardPackID;
|
||||
}
|
||||
|
||||
public sealed class RulesetItemUpgradeRecord
|
||||
|
||||
@@ -21,11 +21,19 @@ using System;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public sealed class SandboxScalingRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint MinLevel;
|
||||
public uint MaxLevel;
|
||||
public uint Flags;
|
||||
}
|
||||
|
||||
public sealed class ScalingStatDistributionRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ushort ItemLevelCurveID;
|
||||
public uint MinLevel;
|
||||
public byte MinLevel;
|
||||
public uint MaxLevel;
|
||||
}
|
||||
|
||||
@@ -48,8 +56,8 @@ namespace Game.DataStorage
|
||||
public ushort QuestRewardID;
|
||||
public byte Step;
|
||||
public ScenarioStepFlags Flags;
|
||||
public uint CriteriaTreeID;
|
||||
public uint BonusRequiredStepID; // Bonus step can only be completed if scenario is in the step specified in this field
|
||||
public ushort CriteriaTreeID;
|
||||
public byte BonusRequiredStepID; // Bonus step can only be completed if scenario is in the step specified in this field
|
||||
|
||||
// helpers
|
||||
public bool IsBonusObjective()
|
||||
@@ -61,18 +69,30 @@ namespace Game.DataStorage
|
||||
public sealed class SceneScriptRecord
|
||||
{
|
||||
public uint Id;
|
||||
public string Name;
|
||||
public string Script;
|
||||
public ushort PrevScriptId;
|
||||
public ushort NextScriptId;
|
||||
}
|
||||
|
||||
public sealed class SceneScriptGlobalTextRecord
|
||||
{
|
||||
public uint Id;
|
||||
public string Name;
|
||||
public string Script;
|
||||
}
|
||||
|
||||
public sealed class SceneScriptPackageRecord
|
||||
{
|
||||
public uint Id;
|
||||
public string Name;
|
||||
}
|
||||
|
||||
public sealed class SceneScriptTextRecord
|
||||
{
|
||||
public uint Id;
|
||||
public string Name;
|
||||
public string Script;
|
||||
}
|
||||
|
||||
public sealed class SkillLineRecord
|
||||
{
|
||||
public uint Id;
|
||||
@@ -83,31 +103,31 @@ namespace Game.DataStorage
|
||||
public SkillCategory CategoryID;
|
||||
public byte CanLink;
|
||||
public uint IconFileDataID;
|
||||
public uint ParentSkillLineID;
|
||||
public byte ParentSkillLineID;
|
||||
}
|
||||
|
||||
public sealed class SkillLineAbilityRecord
|
||||
{
|
||||
public ulong RaceMask;
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public uint RaceMask;
|
||||
public uint SupercedesSpell;
|
||||
public ushort SkillLine;
|
||||
public ushort MinSkillLineRank;
|
||||
public ushort TrivialSkillLineRankHigh;
|
||||
public ushort TrivialSkillLineRankLow;
|
||||
public ushort UniqueBit;
|
||||
public ushort TradeSkillCategoryID;
|
||||
public AbilytyLearnType AcquireMethod;
|
||||
public byte NumSkillUps;
|
||||
public byte Unknown703;
|
||||
public int ClassMask;
|
||||
public ushort MinSkillLineRank;
|
||||
public AbilytyLearnType AcquireMethod;
|
||||
public byte Flags;
|
||||
}
|
||||
|
||||
public sealed class SkillRaceClassInfoRecord
|
||||
{
|
||||
public uint Id;
|
||||
public int RaceMask;
|
||||
public long RaceMask;
|
||||
public ushort SkillID;
|
||||
public SkillRaceClassInfoFlags Flags;
|
||||
public ushort SkillTierID;
|
||||
@@ -138,9 +158,9 @@ namespace Game.DataStorage
|
||||
|
||||
public sealed class SpecializationSpellsRecord
|
||||
{
|
||||
public string Description;
|
||||
public uint SpellID;
|
||||
public uint OverridesSpellID;
|
||||
public LocalizedString Description;
|
||||
public ushort SpecID;
|
||||
public byte OrderIndex;
|
||||
public uint Id;
|
||||
@@ -148,19 +168,16 @@ namespace Game.DataStorage
|
||||
|
||||
public sealed class SpellRecord
|
||||
{
|
||||
public LocalizedString Name;
|
||||
public LocalizedString NameSubtext;
|
||||
public LocalizedString Description;
|
||||
public LocalizedString AuraDescription;
|
||||
public uint MiscID;
|
||||
public uint Id;
|
||||
public uint DescriptionVariablesID;
|
||||
public LocalizedString Name;
|
||||
public string NameSubtext;
|
||||
public string Description;
|
||||
public string AuraDescription;
|
||||
}
|
||||
|
||||
public sealed class SpellAuraOptionsRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public uint ProcCharges;
|
||||
public uint ProcTypeMask;
|
||||
public uint ProcCategoryRecovery;
|
||||
@@ -168,12 +185,12 @@ namespace Game.DataStorage
|
||||
public ushort SpellProcsPerMinuteID;
|
||||
public byte DifficultyID;
|
||||
public byte ProcChance;
|
||||
public uint SpellID;
|
||||
}
|
||||
|
||||
public sealed class SpellAuraRestrictionsRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public uint CasterAuraSpell;
|
||||
public uint TargetAuraSpell;
|
||||
public uint ExcludeCasterAuraSpell;
|
||||
@@ -183,6 +200,7 @@ namespace Game.DataStorage
|
||||
public byte TargetAuraState;
|
||||
public byte ExcludeCasterAuraState;
|
||||
public byte ExcludeTargetAuraState;
|
||||
public uint SpellID;
|
||||
}
|
||||
|
||||
public sealed class SpellCastTimesRecord
|
||||
@@ -208,7 +226,6 @@ namespace Game.DataStorage
|
||||
public sealed class SpellCategoriesRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public ushort Category;
|
||||
public ushort StartRecoveryCategory;
|
||||
public ushort ChargeCategory;
|
||||
@@ -217,6 +234,7 @@ namespace Game.DataStorage
|
||||
public byte DispelType;
|
||||
public byte Mechanic;
|
||||
public byte PreventionType;
|
||||
public uint SpellID;
|
||||
}
|
||||
|
||||
public sealed class SpellCategoryRecord
|
||||
@@ -227,7 +245,7 @@ namespace Game.DataStorage
|
||||
public SpellCategoryFlags Flags;
|
||||
public byte UsesPerWeek;
|
||||
public byte MaxCharges;
|
||||
public uint ChargeCategoryType;
|
||||
public byte ChargeCategoryType;
|
||||
}
|
||||
|
||||
public sealed class SpellClassOptionsRecord
|
||||
@@ -236,17 +254,17 @@ namespace Game.DataStorage
|
||||
public uint SpellID;
|
||||
public FlagArray128 SpellClassMask;
|
||||
public byte SpellClassSet;
|
||||
public uint ModalNextSpell;
|
||||
public ushort ModalNextSpell;
|
||||
}
|
||||
|
||||
public sealed class SpellCooldownsRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public uint CategoryRecoveryTime;
|
||||
public uint RecoveryTime;
|
||||
public uint StartRecoveryTime;
|
||||
public byte DifficultyID;
|
||||
public uint SpellID;
|
||||
}
|
||||
|
||||
public sealed class SpellDurationRecord
|
||||
@@ -259,18 +277,11 @@ namespace Game.DataStorage
|
||||
|
||||
public sealed class SpellEffectRecord
|
||||
{
|
||||
public FlagArray128 EffectSpellClassMask;
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public uint Effect;
|
||||
public uint EffectAura;
|
||||
public int EffectBasePoints;
|
||||
public uint EffectIndex;
|
||||
public int EffectMiscValue;
|
||||
public int EffectMiscValueB;
|
||||
public uint EffectRadiusIndex;
|
||||
public uint EffectRadiusMaxIndex;
|
||||
public uint[] ImplicitTarget = new uint[2];
|
||||
public byte EffectIndex;
|
||||
public uint EffectAura;
|
||||
public uint DifficultyID;
|
||||
public float EffectAmplitude;
|
||||
public uint EffectAuraPeriod;
|
||||
@@ -287,15 +298,17 @@ namespace Game.DataStorage
|
||||
public uint EffectAttributes;
|
||||
public float BonusCoefficientFromAP;
|
||||
public float PvPMultiplier;
|
||||
}
|
||||
|
||||
public sealed class SpellEffectScalingRecord
|
||||
{
|
||||
public uint Id;
|
||||
public float Coefficient;
|
||||
public float Variance;
|
||||
public float ResourceCoefficient;
|
||||
public uint SpellEffectID;
|
||||
public float GroupSizeCoefficient;
|
||||
public FlagArray128 EffectSpellClassMask;
|
||||
public int EffectMiscValue;
|
||||
public int EffectMiscValueB;
|
||||
public uint EffectRadiusIndex;
|
||||
public uint EffectRadiusMaxIndex;
|
||||
public uint[] ImplicitTarget = new uint[2];
|
||||
public uint SpellID;
|
||||
}
|
||||
|
||||
public sealed class SpellEquippedItemsRecord
|
||||
@@ -316,18 +329,18 @@ namespace Game.DataStorage
|
||||
public sealed class SpellInterruptsRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public byte DifficultyID;
|
||||
public ushort InterruptFlags;
|
||||
public uint[] AuraInterruptFlags = new uint[2];
|
||||
public uint[] ChannelInterruptFlags = new uint[2];
|
||||
public ushort InterruptFlags;
|
||||
public byte DifficultyID;
|
||||
public uint SpellID;
|
||||
}
|
||||
|
||||
public sealed class SpellItemEnchantmentRecord
|
||||
{
|
||||
public uint Id;
|
||||
public string Name;
|
||||
public uint[] EffectSpellID = new uint[ItemConst.MaxItemEnchantmentEffects];
|
||||
public LocalizedString Name;
|
||||
public float[] EffectScalingPoints = new float[ItemConst.MaxItemEnchantmentEffects];
|
||||
public uint TransmogCost;
|
||||
public uint TextureFileDataID;
|
||||
@@ -344,18 +357,18 @@ namespace Game.DataStorage
|
||||
public byte MaxLevel;
|
||||
public sbyte ScalingClass;
|
||||
public sbyte ScalingClassRestricted;
|
||||
public uint PlayerConditionID;
|
||||
public ushort PlayerConditionID;
|
||||
}
|
||||
|
||||
public sealed class SpellItemEnchantmentConditionRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint[] LTOperand = new uint[5];
|
||||
public byte[] LTOperandType = new byte[5];
|
||||
public byte[] Operator = new byte[5];
|
||||
public byte[] RTOperandType = new byte[5];
|
||||
public byte[] RTOperand = new byte[5];
|
||||
public byte[] Logic = new byte[5];
|
||||
public uint[] LTOperand = new uint[5];
|
||||
}
|
||||
|
||||
public sealed class SpellLearnSpellRecord
|
||||
@@ -369,17 +382,26 @@ namespace Game.DataStorage
|
||||
public sealed class SpellLevelsRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public ushort BaseLevel;
|
||||
public ushort MaxLevel;
|
||||
public ushort SpellLevel;
|
||||
public byte DifficultyID;
|
||||
public byte MaxUsableLevel;
|
||||
public uint SpellID;
|
||||
}
|
||||
|
||||
public sealed class SpellMiscRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ushort CastingTimeIndex;
|
||||
public ushort DurationIndex;
|
||||
public ushort RangeIndex;
|
||||
public byte SchoolMask;
|
||||
public uint IconFileDataID;
|
||||
public float Speed;
|
||||
public uint ActiveIconFileDataID;
|
||||
public float MultistrikeSpeedMod;
|
||||
public byte DifficultyID;
|
||||
public uint Attributes;
|
||||
public uint AttributesEx;
|
||||
public uint AttributesExB;
|
||||
@@ -394,19 +416,11 @@ namespace Game.DataStorage
|
||||
public uint AttributesExK;
|
||||
public uint AttributesExL;
|
||||
public uint AttributesExM;
|
||||
public float Speed;
|
||||
public float MultistrikeSpeedMod;
|
||||
public ushort CastingTimeIndex;
|
||||
public ushort DurationIndex;
|
||||
public ushort RangeIndex;
|
||||
public byte SchoolMask;
|
||||
public uint IconFileDataID;
|
||||
public uint ActiveIconFileDataID;
|
||||
public uint SpellID;
|
||||
}
|
||||
|
||||
public sealed class SpellPowerRecord
|
||||
{
|
||||
public uint SpellID;
|
||||
public int ManaCost;
|
||||
public float ManaCostPercentage;
|
||||
public float ManaCostPercentagePerSecond;
|
||||
@@ -415,12 +429,13 @@ namespace Game.DataStorage
|
||||
public byte PowerIndex;
|
||||
public PowerType PowerType;
|
||||
public uint Id;
|
||||
public int ManaCostPerLevel;
|
||||
public int ManaCostPerSecond;
|
||||
public byte ManaCostPerLevel;
|
||||
public ushort ManaCostPerSecond;
|
||||
public int ManaCostAdditional; // Spell uses [ManaCost, ManaCost+ManaCostAdditional] power - affects tooltip parsing as multiplier on SpellEffectEntry::EffectPointsPerResource
|
||||
// only SPELL_EFFECT_WEAPON_DAMAGE_NOSCHOOL, SPELL_EFFECT_WEAPON_PERCENT_DAMAGE, SPELL_EFFECT_WEAPON_DAMAGE, SPELL_EFFECT_NORMALIZED_WEAPON_DMG
|
||||
public uint PowerDisplayID;
|
||||
public uint UnitPowerBarID;
|
||||
public uint SpellID;
|
||||
}
|
||||
|
||||
public sealed class SpellPowerDifficultyRecord
|
||||
@@ -442,8 +457,8 @@ namespace Game.DataStorage
|
||||
public uint Id;
|
||||
public float Coeff;
|
||||
public ushort Param;
|
||||
public byte SpellProcsPerMinuteID;
|
||||
public SpellProcsPerMinuteModType Type;
|
||||
public uint SpellProcsPerMinuteID;
|
||||
}
|
||||
|
||||
public sealed class SpellRadiusRecord
|
||||
@@ -458,12 +473,12 @@ namespace Game.DataStorage
|
||||
public sealed class SpellRangeRecord
|
||||
{
|
||||
public uint Id;
|
||||
public string DisplayName;
|
||||
public string DisplayNameShort;
|
||||
public float MinRangeHostile;
|
||||
public float MinRangeFriend;
|
||||
public float MaxRangeHostile;
|
||||
public float MaxRangeFriend;
|
||||
public LocalizedString DisplayName;
|
||||
public LocalizedString DisplayNameShort;
|
||||
public SpellRangeFlag Flags;
|
||||
}
|
||||
|
||||
@@ -480,8 +495,8 @@ namespace Game.DataStorage
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public ushort ScalesFromItemLevel;
|
||||
public int ScalingClass;
|
||||
public uint MinScalingLevel;
|
||||
public byte ScalingClass;
|
||||
public byte MinScalingLevel;
|
||||
public uint MaxScalingLevel;
|
||||
}
|
||||
|
||||
@@ -512,7 +527,6 @@ namespace Game.DataStorage
|
||||
public sealed class SpellTargetRestrictionsRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public float ConeAngle;
|
||||
public float Width;
|
||||
public uint Targets;
|
||||
@@ -520,6 +534,7 @@ namespace Game.DataStorage
|
||||
public byte DifficultyID;
|
||||
public byte MaxAffectedTargets;
|
||||
public uint MaxTargetLevel;
|
||||
public uint SpellID;
|
||||
}
|
||||
|
||||
public sealed class SpellTotemsRecord
|
||||
@@ -532,7 +547,6 @@ namespace Game.DataStorage
|
||||
|
||||
public sealed class SpellXSpellVisualRecord
|
||||
{
|
||||
public uint SpellID;
|
||||
public uint SpellVisualID;
|
||||
public uint Id;
|
||||
public float Chance;
|
||||
@@ -545,6 +559,7 @@ namespace Game.DataStorage
|
||||
public byte Flags;
|
||||
public byte DifficultyID;
|
||||
public byte Priority;
|
||||
public uint SpellID;
|
||||
}
|
||||
|
||||
public sealed class SummonPropertiesRecord
|
||||
@@ -552,8 +567,8 @@ namespace Game.DataStorage
|
||||
public uint Id;
|
||||
public uint Flags;
|
||||
public SummonCategory Category;
|
||||
public uint Faction;
|
||||
public ushort Faction;
|
||||
public SummonType Type;
|
||||
public int Slot;
|
||||
public byte Slot;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,9 +29,9 @@ namespace Game.DataStorage
|
||||
public sealed class TalentRecord
|
||||
{
|
||||
public uint Id;
|
||||
public string Description;
|
||||
public uint SpellID;
|
||||
public uint OverridesSpellID;
|
||||
public LocalizedString Description;
|
||||
public ushort SpecID;
|
||||
public byte TierID;
|
||||
public byte ColumnIndex;
|
||||
@@ -43,8 +43,8 @@ namespace Game.DataStorage
|
||||
public sealed class TaxiNodesRecord
|
||||
{
|
||||
public uint Id;
|
||||
public Vector3 Pos;
|
||||
public LocalizedString Name;
|
||||
public Vector3 Pos;
|
||||
public uint[] MountCreatureID = new uint[2];
|
||||
public Vector2 MapOffset;
|
||||
public float Unk730;
|
||||
@@ -88,8 +88,8 @@ namespace Game.DataStorage
|
||||
|
||||
public sealed class ToyRecord
|
||||
{
|
||||
public uint ItemID;
|
||||
public LocalizedString Description;
|
||||
public uint ItemID;
|
||||
public byte Flags;
|
||||
public byte CategoryFilter;
|
||||
public uint Id;
|
||||
@@ -108,11 +108,11 @@ namespace Game.DataStorage
|
||||
public ushort UIOrder;
|
||||
public byte ExpansionID;
|
||||
public uint Id;
|
||||
public int Flags;
|
||||
public byte Flags;
|
||||
public int QuestID;
|
||||
public int ClassMask;
|
||||
public int ItemNameDescriptionID;
|
||||
public uint TransmogSetGroupID;
|
||||
public byte TransmogSetGroupID;
|
||||
}
|
||||
|
||||
public sealed class TransmogSetGroupRecord
|
||||
@@ -132,20 +132,20 @@ namespace Game.DataStorage
|
||||
public sealed class TransportAnimationRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint TransportID;
|
||||
public uint TimeIndex;
|
||||
public Vector3 Pos;
|
||||
public byte SequenceID;
|
||||
public uint TransportID;
|
||||
}
|
||||
|
||||
public sealed class TransportRotationRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint TransportID;
|
||||
public uint TimeIndex;
|
||||
public float X;
|
||||
public float Y;
|
||||
public float Z;
|
||||
public float W;
|
||||
public uint TransportID;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,21 +20,21 @@ namespace Game.DataStorage
|
||||
public sealed class UnitPowerBarRecord
|
||||
{
|
||||
public uint Id;
|
||||
public string Name;
|
||||
public string Cost;
|
||||
public string OutOfError;
|
||||
public string ToolTip;
|
||||
public float RegenerationPeace;
|
||||
public float RegenerationCombat;
|
||||
public uint[] FileDataID = new uint[6];
|
||||
public uint[] Color = new uint[6];
|
||||
public LocalizedString Name;
|
||||
public LocalizedString Cost;
|
||||
public LocalizedString OutOfError;
|
||||
public LocalizedString ToolTip;
|
||||
public float StartInset;
|
||||
public float EndInset;
|
||||
public ushort StartPower;
|
||||
public ushort Flags;
|
||||
public byte CenterPower;
|
||||
public byte BarType;
|
||||
public uint MinPower;
|
||||
public byte MinPower;
|
||||
public uint MaxPower;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ namespace Game.DataStorage
|
||||
public ushort[] PowerDisplayID = new ushort[3];
|
||||
public byte FlagsB;
|
||||
public byte UILocomotionType;
|
||||
public int MissileTargetingID;
|
||||
public ushort MissileTargetingID;
|
||||
}
|
||||
|
||||
public sealed class VehicleSeatRecord
|
||||
@@ -105,7 +105,7 @@ namespace Game.DataStorage
|
||||
public sbyte VehicleRideAnimLoopBone;
|
||||
public byte VehicleAbilityDisplay;
|
||||
public uint EnterUISoundID;
|
||||
public uint ExitUISoundID;
|
||||
public ushort ExitUISoundID;
|
||||
|
||||
|
||||
public bool CanEnterOrExit()
|
||||
|
||||
@@ -22,9 +22,8 @@ namespace Game.DataStorage
|
||||
{
|
||||
public sealed class WMOAreaTableRecord
|
||||
{
|
||||
public string AreaName;
|
||||
public int WMOGroupID; // used in group WMO
|
||||
public LocalizedString AreaName;
|
||||
public short WMOID; // used in root WMO
|
||||
public ushort AmbienceID;
|
||||
public ushort ZoneMusic;
|
||||
public ushort IntroSound;
|
||||
@@ -35,8 +34,9 @@ namespace Game.DataStorage
|
||||
public byte SoundProviderPref;
|
||||
public byte SoundProviderPrefUnderwater;
|
||||
public byte Flags;
|
||||
public uint I;
|
||||
public uint UWZoneMusic;
|
||||
public uint Id;
|
||||
public byte UWZoneMusic;
|
||||
public uint WMOID; // used in root WMO
|
||||
}
|
||||
|
||||
public sealed class WorldEffectRecord
|
||||
@@ -47,7 +47,7 @@ namespace Game.DataStorage
|
||||
public byte TargetType;
|
||||
public byte WhenToDisplay;
|
||||
public uint QuestFeedbackEffectID;
|
||||
public uint PlayerConditionID;
|
||||
public ushort PlayerConditionID;
|
||||
}
|
||||
|
||||
public sealed class WorldMapAreaRecord
|
||||
@@ -73,20 +73,21 @@ namespace Game.DataStorage
|
||||
|
||||
public sealed class WorldMapOverlayRecord
|
||||
{
|
||||
public uint Id;
|
||||
public string TextureName;
|
||||
public uint Id;
|
||||
public ushort TextureWidth;
|
||||
public ushort TextureHeight;
|
||||
public uint MapAreaID; // idx in WorldMapArea.dbc
|
||||
public uint[] AreaID = new uint[SharedConst.MaxWorldMapOverlayArea];
|
||||
public int OffsetX;
|
||||
public int OffsetY;
|
||||
public int HitRectTop;
|
||||
public int HitRectLeft;
|
||||
public int HitRectBottom;
|
||||
public int HitRectRight;
|
||||
public uint PlayerConditionID;
|
||||
public uint Flags;
|
||||
public ushort MapAreaID; // idx in WorldMapArea.dbc
|
||||
public ushort OffsetX;
|
||||
public uint OffsetY;
|
||||
public ushort HitRectTop;
|
||||
public ushort HitRectLeft;
|
||||
public ushort HitRectBottom;
|
||||
public ushort HitRectRight;
|
||||
public ushort PlayerConditionID;
|
||||
public byte Flags;
|
||||
public uint[] AreaID = new uint[SharedConst.MaxWorldMapOverlayArea]; // needs checked
|
||||
|
||||
}
|
||||
|
||||
public sealed class WorldMapTransformsRecord
|
||||
@@ -108,9 +109,9 @@ namespace Game.DataStorage
|
||||
public sealed class WorldSafeLocsRecord
|
||||
{
|
||||
public uint Id;
|
||||
public string AreaName;
|
||||
public Vector3 Loc;
|
||||
public float Facing;
|
||||
public LocalizedString AreaName;
|
||||
public ushort MapID;
|
||||
}
|
||||
}
|
||||
|
||||
+214
-154
@@ -1580,158 +1580,166 @@ namespace Game.Entities
|
||||
return true;
|
||||
}
|
||||
|
||||
// used by mail items, transmog cost, stationeryinfo and others
|
||||
static uint GetSellPrice(ItemTemplate proto, out bool normalSellPrice)
|
||||
uint GetBuyPrice(Player owner, out bool standardPrice)
|
||||
{
|
||||
normalSellPrice = true;
|
||||
|
||||
if (proto.GetFlags2().HasAnyFlag(ItemFlags2.OverrideGoldCost))
|
||||
{
|
||||
return proto.GetBuyPrice();
|
||||
}
|
||||
else
|
||||
{
|
||||
var qualityPrice = CliDB.ImportPriceQualityStorage.LookupByKey(proto.GetQuality() + 1);
|
||||
var basePrice = CliDB.ItemPriceBaseStorage.LookupByKey(proto.GetBaseItemLevel());
|
||||
|
||||
if (qualityPrice == null || basePrice == null)
|
||||
return 0;
|
||||
|
||||
float qualityFactor = qualityPrice.Factor;
|
||||
float baseFactor = 0.0f;
|
||||
|
||||
var inventoryType = proto.GetInventoryType();
|
||||
|
||||
if (inventoryType == InventoryType.Weapon ||
|
||||
inventoryType == InventoryType.Weapon2Hand ||
|
||||
inventoryType == InventoryType.WeaponMainhand ||
|
||||
inventoryType == InventoryType.WeaponOffhand ||
|
||||
inventoryType == InventoryType.Ranged ||
|
||||
inventoryType == InventoryType.Thrown ||
|
||||
inventoryType == InventoryType.RangedRight)
|
||||
baseFactor = basePrice.WeaponFactor;
|
||||
else
|
||||
baseFactor = basePrice.ArmorFactor;
|
||||
|
||||
if (inventoryType == InventoryType.Robe)
|
||||
inventoryType = InventoryType.Chest;
|
||||
|
||||
float typeFactor = 0.0f;
|
||||
sbyte weapType = -1;
|
||||
|
||||
switch (inventoryType)
|
||||
{
|
||||
case InventoryType.Head:
|
||||
case InventoryType.Shoulders:
|
||||
case InventoryType.Chest:
|
||||
case InventoryType.Waist:
|
||||
case InventoryType.Legs:
|
||||
case InventoryType.Feet:
|
||||
case InventoryType.Wrists:
|
||||
case InventoryType.Hands:
|
||||
case InventoryType.Cloak:
|
||||
{
|
||||
var armorPrice = CliDB.ImportPriceArmorStorage.LookupByKey(inventoryType);
|
||||
if (armorPrice == null)
|
||||
return 0;
|
||||
|
||||
switch ((ItemSubClassArmor)proto.GetSubClass())
|
||||
{
|
||||
case ItemSubClassArmor.Miscellaneous:
|
||||
case ItemSubClassArmor.Cloth:
|
||||
typeFactor = armorPrice.ClothFactor;
|
||||
break;
|
||||
case ItemSubClassArmor.Leather:
|
||||
typeFactor = armorPrice.LeatherFactor;
|
||||
break;
|
||||
case ItemSubClassArmor.Mail:
|
||||
typeFactor = armorPrice.MailFactor;
|
||||
break;
|
||||
case ItemSubClassArmor.Plate:
|
||||
typeFactor = armorPrice.PlateFactor;
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case InventoryType.Shield:
|
||||
{
|
||||
var shieldPrice = CliDB.ImportPriceShieldStorage.LookupByKey(1); // it only has two rows, it's unclear which is the one used
|
||||
if (shieldPrice == null)
|
||||
return 0;
|
||||
|
||||
typeFactor = shieldPrice.Factor;
|
||||
break;
|
||||
}
|
||||
case InventoryType.WeaponMainhand:
|
||||
weapType = 0;
|
||||
break;
|
||||
case InventoryType.WeaponOffhand:
|
||||
weapType = 1;
|
||||
break;
|
||||
case InventoryType.Weapon:
|
||||
weapType = 2;
|
||||
break;
|
||||
case InventoryType.Weapon2Hand:
|
||||
weapType = 3;
|
||||
break;
|
||||
case InventoryType.Ranged:
|
||||
case InventoryType.RangedRight:
|
||||
case InventoryType.Relic:
|
||||
weapType = 4;
|
||||
break;
|
||||
default:
|
||||
return proto.GetBuyPrice();
|
||||
}
|
||||
|
||||
if (weapType != -1)
|
||||
{
|
||||
var weaponPrice = CliDB.ImportPriceWeaponStorage.LookupByKey(weapType + 1);
|
||||
if (weaponPrice == null)
|
||||
return 0;
|
||||
|
||||
typeFactor = weaponPrice.Factor;
|
||||
}
|
||||
|
||||
normalSellPrice = false;
|
||||
return (uint)(qualityFactor * proto.GetUnk2() * proto.GetUnk1() * typeFactor * baseFactor);
|
||||
}
|
||||
return GetBuyPrice(GetTemplate(), (uint)GetQuality(), GetItemLevel(owner), out standardPrice);
|
||||
}
|
||||
|
||||
public static uint GetSpecialPrice(ItemTemplate proto, uint minimumPrice = 10000)
|
||||
static uint GetBuyPrice(ItemTemplate proto, uint quality, uint itemLevel, out bool standardPrice)
|
||||
{
|
||||
uint cost = 0;
|
||||
standardPrice = true;
|
||||
|
||||
if (proto.GetFlags2().HasAnyFlag(ItemFlags2.OverrideGoldCost))
|
||||
cost = proto.GetSellPrice();
|
||||
else
|
||||
{
|
||||
bool normalPrice;
|
||||
cost = GetSellPrice(proto, out normalPrice);
|
||||
return proto.GetBuyPrice();
|
||||
|
||||
if (!normalPrice)
|
||||
{
|
||||
if (proto.GetBuyCount() <= 1)
|
||||
{
|
||||
var classEntry = Global.DB2Mgr.GetItemClassByOldEnum(proto.GetClass());
|
||||
if (classEntry != null)
|
||||
cost *= (uint)classEntry.PriceMod;
|
||||
else
|
||||
cost = 0;
|
||||
}
|
||||
else
|
||||
cost /= 4 * proto.GetBuyCount();
|
||||
}
|
||||
else
|
||||
cost = proto.GetSellPrice();
|
||||
var qualityPrice = CliDB.ImportPriceQualityStorage.LookupByKey(quality + 1);
|
||||
if (qualityPrice == null)
|
||||
return 0;
|
||||
|
||||
var basePrice = CliDB.ItemPriceBaseStorage.LookupByKey(proto.GetBaseItemLevel());
|
||||
if (basePrice == null)
|
||||
return 0;
|
||||
|
||||
float qualityFactor = qualityPrice.Factor;
|
||||
float baseFactor = 0.0f;
|
||||
|
||||
var inventoryType = proto.GetInventoryType();
|
||||
|
||||
if (inventoryType == InventoryType.Weapon ||
|
||||
inventoryType == InventoryType.Weapon2Hand ||
|
||||
inventoryType == InventoryType.WeaponMainhand ||
|
||||
inventoryType == InventoryType.WeaponOffhand ||
|
||||
inventoryType == InventoryType.Ranged ||
|
||||
inventoryType == InventoryType.Thrown ||
|
||||
inventoryType == InventoryType.RangedRight)
|
||||
baseFactor = basePrice.WeaponFactor;
|
||||
else
|
||||
baseFactor = basePrice.ArmorFactor;
|
||||
|
||||
if (inventoryType == InventoryType.Robe)
|
||||
inventoryType = InventoryType.Chest;
|
||||
|
||||
if (proto.GetClass() == ItemClass.Gem && (ItemSubClassGem)proto.GetSubClass() == ItemSubClassGem.ArtifactRelic)
|
||||
{
|
||||
inventoryType = InventoryType.Weapon;
|
||||
baseFactor = basePrice.WeaponFactor / 3.0f;
|
||||
}
|
||||
|
||||
if (cost < minimumPrice)
|
||||
cost = minimumPrice;
|
||||
|
||||
return cost;
|
||||
float typeFactor = 0.0f;
|
||||
sbyte weapType = -1;
|
||||
|
||||
switch (inventoryType)
|
||||
{
|
||||
case InventoryType.Head:
|
||||
case InventoryType.Neck:
|
||||
case InventoryType.Shoulders:
|
||||
case InventoryType.Chest:
|
||||
case InventoryType.Waist:
|
||||
case InventoryType.Legs:
|
||||
case InventoryType.Feet:
|
||||
case InventoryType.Wrists:
|
||||
case InventoryType.Hands:
|
||||
case InventoryType.Finger:
|
||||
case InventoryType.Trinket:
|
||||
case InventoryType.Cloak:
|
||||
case InventoryType.Holdable:
|
||||
{
|
||||
var armorPrice = CliDB.ImportPriceArmorStorage.LookupByKey(inventoryType);
|
||||
if (armorPrice == null)
|
||||
return 0;
|
||||
|
||||
switch ((ItemSubClassArmor)proto.GetSubClass())
|
||||
{
|
||||
case ItemSubClassArmor.Miscellaneous:
|
||||
case ItemSubClassArmor.Cloth:
|
||||
typeFactor = armorPrice.ClothFactor;
|
||||
break;
|
||||
case ItemSubClassArmor.Leather:
|
||||
typeFactor = armorPrice.LeatherFactor;
|
||||
break;
|
||||
case ItemSubClassArmor.Mail:
|
||||
typeFactor = armorPrice.MailFactor;
|
||||
break;
|
||||
case ItemSubClassArmor.Plate:
|
||||
typeFactor = armorPrice.PlateFactor;
|
||||
break;
|
||||
default:
|
||||
typeFactor = 1.0f;
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case InventoryType.Shield:
|
||||
{
|
||||
var shieldPrice = CliDB.ImportPriceShieldStorage.LookupByKey(2); // it only has two rows, it's unclear which is the one used
|
||||
if (shieldPrice == null)
|
||||
return 0;
|
||||
|
||||
typeFactor = shieldPrice.Factor;
|
||||
break;
|
||||
}
|
||||
case InventoryType.WeaponMainhand:
|
||||
weapType = 0;
|
||||
break;
|
||||
case InventoryType.WeaponOffhand:
|
||||
weapType = 1;
|
||||
break;
|
||||
case InventoryType.Weapon:
|
||||
weapType = 2;
|
||||
break;
|
||||
case InventoryType.Weapon2Hand:
|
||||
weapType = 3;
|
||||
break;
|
||||
case InventoryType.Ranged:
|
||||
case InventoryType.RangedRight:
|
||||
case InventoryType.Relic:
|
||||
weapType = 4;
|
||||
break;
|
||||
default:
|
||||
return proto.GetBuyPrice();
|
||||
}
|
||||
|
||||
if (weapType != -1)
|
||||
{
|
||||
var weaponPrice = CliDB.ImportPriceWeaponStorage.LookupByKey(weapType + 1);
|
||||
if (weaponPrice == null)
|
||||
return 0;
|
||||
|
||||
typeFactor = weaponPrice.Factor;
|
||||
}
|
||||
|
||||
standardPrice = false;
|
||||
return (uint)(proto.GetUnk2() * typeFactor * baseFactor * qualityFactor * proto.GetUnk1());
|
||||
}
|
||||
|
||||
public uint GetSellPrice(Player owner)
|
||||
{
|
||||
return GetSellPrice(GetTemplate(), (uint)GetQuality(), GetItemLevel(owner));
|
||||
}
|
||||
|
||||
public static uint GetSellPrice(ItemTemplate proto, uint quality, uint itemLevel)
|
||||
{
|
||||
if (proto.GetFlags2().HasAnyFlag(ItemFlags2.OverrideGoldCost))
|
||||
return proto.GetSellPrice();
|
||||
|
||||
bool standardPrice;
|
||||
uint cost = GetBuyPrice(proto, quality, itemLevel, out standardPrice);
|
||||
|
||||
if (standardPrice)
|
||||
{
|
||||
ItemClassRecord classEntry = Global.DB2Mgr.GetItemClassByOldEnum(proto.GetClass());
|
||||
if (classEntry != null)
|
||||
{
|
||||
uint buyCount = Math.Max(proto.GetBuyCount(), 1u);
|
||||
return (uint)(cost * classEntry.PriceMod / buyCount);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
return proto.GetSellPrice();
|
||||
}
|
||||
|
||||
public int GetReforgableStat(ItemModType statType)
|
||||
@@ -1967,35 +1975,41 @@ namespace Game.Entities
|
||||
|
||||
public uint GetItemLevel(Player owner)
|
||||
{
|
||||
ItemTemplate stats = GetTemplate();
|
||||
if (stats == null)
|
||||
return GetItemLevel(GetTemplate(), _bonusData, owner.getLevel(), GetModifier(ItemModifier.ScalingStatDistributionFixedLevel), GetModifier(ItemModifier.UpgradeId));
|
||||
}
|
||||
|
||||
public static uint GetItemLevel(ItemTemplate itemTemplate, BonusData bonusData, uint level, uint fixedLevel, uint upgradeId)
|
||||
{
|
||||
if (itemTemplate == null)
|
||||
return 1;
|
||||
|
||||
uint itemLevel = stats.GetBaseItemLevel();
|
||||
ScalingStatDistributionRecord ssd = CliDB.ScalingStatDistributionStorage.LookupByKey(GetScalingStatDistribution());
|
||||
uint itemLevel = itemTemplate.GetBaseItemLevel();
|
||||
ScalingStatDistributionRecord ssd = CliDB.ScalingStatDistributionStorage.LookupByKey(bonusData.ScalingStatDistribution);
|
||||
if (ssd != null)
|
||||
{
|
||||
uint level = owner.getLevel();
|
||||
|
||||
uint fixedLevel = GetModifier(ItemModifier.ScalingStatDistributionFixedLevel);
|
||||
if (fixedLevel != 0)
|
||||
level = fixedLevel;
|
||||
else
|
||||
level = Math.Min(Math.Max(level, ssd.MinLevel), ssd.MaxLevel);
|
||||
|
||||
SandboxScalingRecord sandbox = CliDB.SandboxScalingStorage.LookupByKey(bonusData.SandboxScalingId);
|
||||
if (sandbox != null)
|
||||
if ((Convert.ToBoolean(sandbox.Flags & 2) || sandbox.MinLevel != 0 || sandbox.MaxLevel != 0) && !Convert.ToBoolean(sandbox.Flags & 4))
|
||||
level = Math.Min(Math.Max(level, sandbox.MinLevel), sandbox.MaxLevel);
|
||||
|
||||
uint heirloomIlvl = (uint)Global.DB2Mgr.GetCurveValueAt(ssd.ItemLevelCurveID, level);
|
||||
if (heirloomIlvl != 0)
|
||||
itemLevel = heirloomIlvl;
|
||||
}
|
||||
|
||||
itemLevel += (uint)_bonusData.ItemLevelBonus;
|
||||
itemLevel += (uint)bonusData.ItemLevelBonus;
|
||||
|
||||
ItemUpgradeRecord upgrade = CliDB.ItemUpgradeStorage.LookupByKey(GetModifier(ItemModifier.UpgradeId));
|
||||
ItemUpgradeRecord upgrade = CliDB.ItemUpgradeStorage.LookupByKey(upgradeId);
|
||||
if (upgrade != null)
|
||||
itemLevel += upgrade.ItemLevelBonus;
|
||||
|
||||
for (uint i = 0; i < ItemConst.MaxGemSockets; ++i)
|
||||
itemLevel += _bonusData.GemItemLevelBonus[i];
|
||||
itemLevel += bonusData.GemItemLevelBonus[i];
|
||||
|
||||
return Math.Min(Math.Max(itemLevel, 1), 1300);
|
||||
}
|
||||
@@ -2018,6 +2032,48 @@ namespace Game.Entities
|
||||
return _bonusData.ItemStatValue[index];
|
||||
}
|
||||
|
||||
public ItemDisenchantLootRecord GetDisenchantLoot(Player owner)
|
||||
{
|
||||
return GetDisenchantLoot(GetTemplate(), (uint)GetQuality(), GetItemLevel(owner));
|
||||
}
|
||||
|
||||
public static ItemDisenchantLootRecord GetDisenchantLoot(ItemTemplate itemTemplate, uint quality, uint itemLevel)
|
||||
{
|
||||
if (itemTemplate.GetFlags().HasAnyFlag(ItemFlags.Conjured | ItemFlags.NoDisenchant) || itemTemplate.GetBonding() == ItemBondingType.Quest)
|
||||
return null;
|
||||
|
||||
if (itemTemplate.GetArea() != 0 || itemTemplate.GetMap() != 0 || itemTemplate.GetMaxStackSize() > 1)
|
||||
return null;
|
||||
|
||||
if (GetSellPrice(itemTemplate, quality, itemLevel) == 0 && !Global.DB2Mgr.HasItemCurrencyCost(itemTemplate.GetId()))
|
||||
return null;
|
||||
|
||||
byte itemClass = (byte)itemTemplate.GetClass();
|
||||
uint itemSubClass = itemTemplate.GetSubClass();
|
||||
byte expansion = itemTemplate.GetRequiredExpansion();
|
||||
foreach (ItemDisenchantLootRecord disenchant in CliDB.ItemDisenchantLootStorage.Values)
|
||||
{
|
||||
if (disenchant.ItemClass != itemClass)
|
||||
continue;
|
||||
|
||||
if (disenchant.ItemSubClass >= 0 && itemSubClass != 0)
|
||||
continue;
|
||||
|
||||
if (disenchant.ItemQuality != quality)
|
||||
continue;
|
||||
|
||||
if (disenchant.MinItemLevel > itemLevel || disenchant.MaxItemLevel < itemLevel)
|
||||
continue;
|
||||
|
||||
if (disenchant.Expansion != -2 && disenchant.Expansion != expansion)
|
||||
continue;
|
||||
|
||||
return disenchant;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public uint GetDisplayId(Player owner)
|
||||
{
|
||||
ItemModifier transmogModifier = ItemModifier.TransmogAppearanceAllSpecs;
|
||||
@@ -2535,8 +2591,6 @@ namespace Game.Entities
|
||||
|
||||
public uint GetScriptId() { return GetTemplate().ScriptId; }
|
||||
|
||||
public uint GetSpecialPrice(uint minimumPrice = 10000) { return GetSpecialPrice(GetTemplate(), minimumPrice); }
|
||||
|
||||
public ObjectGuid GetChildItem() { return m_childItem; }
|
||||
public void SetChildItem(ObjectGuid childItem) { m_childItem = childItem; }
|
||||
|
||||
@@ -2804,6 +2858,7 @@ namespace Game.Entities
|
||||
if (values[1] < _state.ScalingStatDistributionPriority)
|
||||
{
|
||||
ScalingStatDistribution = (uint)values[0];
|
||||
SandboxScalingId = (uint)values[2];
|
||||
_state.ScalingStatDistributionPriority = values[1];
|
||||
}
|
||||
break;
|
||||
@@ -2813,6 +2868,9 @@ namespace Game.Entities
|
||||
case ItemBonusType.RelicType:
|
||||
RelicType = values[0];
|
||||
break;
|
||||
case ItemBonusType.OverrideRequiredLevel:
|
||||
RequiredLevel = values[0];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2828,6 +2886,8 @@ namespace Game.Entities
|
||||
public uint AppearanceModID;
|
||||
public float RepairCostMultiplier;
|
||||
public uint ScalingStatDistribution;
|
||||
public uint SandboxScalingId;
|
||||
public uint DisenchantLootId;
|
||||
public uint[] GemItemLevelBonus = new uint[ItemConst.MaxGemSockets];
|
||||
public int[] GemRelicType = new int[ItemConst.MaxGemSockets];
|
||||
public ushort[] GemRelicRankBonus = new ushort[ItemConst.MaxGemSockets];
|
||||
|
||||
@@ -237,9 +237,9 @@ namespace Game.Entities
|
||||
public uint GetBuyCount() { return Math.Max(ExtendedData.BuyCount, 1u); }
|
||||
public uint GetBuyPrice() { return ExtendedData.BuyPrice; }
|
||||
public uint GetSellPrice() { return ExtendedData.SellPrice; }
|
||||
public InventoryType GetInventoryType() { return (InventoryType)ExtendedData.inventoryType; }
|
||||
public InventoryType GetInventoryType() { return ExtendedData.inventoryType; }
|
||||
public int GetAllowableClass() { return ExtendedData.AllowableClass; }
|
||||
public int GetAllowableRace() { return ExtendedData.AllowableRace; }
|
||||
public long GetAllowableRace() { return ExtendedData.AllowableRace; }
|
||||
public uint GetBaseItemLevel() { return ExtendedData.ItemLevel; }
|
||||
public int GetBaseRequiredLevel() { return ExtendedData.RequiredLevel; }
|
||||
public uint GetRequiredSkill() { return ExtendedData.RequiredSkill; }
|
||||
@@ -297,6 +297,7 @@ namespace Game.Entities
|
||||
public HolidayIds GetHolidayID() { return (HolidayIds)ExtendedData.HolidayID; }
|
||||
public float GetStatScalingFactor() { return ExtendedData.StatScalingFactor; }
|
||||
public byte GetArtifactID() { return ExtendedData.ArtifactID; }
|
||||
public byte GetRequiredExpansion() { return ExtendedData.RequiredExpansion; }
|
||||
|
||||
public bool IsCurrencyToken() { return (GetBagFamily() & BagFamilyMask.CurrencyTokens) != 0; }
|
||||
|
||||
@@ -321,8 +322,6 @@ namespace Game.Entities
|
||||
|
||||
// extra fields, not part of db2 files
|
||||
public uint ScriptId;
|
||||
public uint DisenchantID;
|
||||
public uint RequiredDisenchantSkill;
|
||||
public uint FoodType;
|
||||
public uint MinMoneyLoot;
|
||||
public uint MaxMoneyLoot;
|
||||
|
||||
@@ -3046,7 +3046,7 @@ namespace Game.Entities
|
||||
float bubble0 = 0.031f;
|
||||
//speed collect rest bonus in offline, in logout, in tavern, city (section/in hour)
|
||||
float bubble1 = 0.125f;
|
||||
float bubble = result.Read<byte>(32) > 0
|
||||
float bubble = result.Read<byte>(33) > 0
|
||||
? bubble1 * WorldConfig.GetFloatValue(WorldCfg.RateRestOfflineInTavernOrCity)
|
||||
: bubble0 * WorldConfig.GetFloatValue(WorldCfg.RateRestOfflineInWilderness);
|
||||
|
||||
@@ -3125,7 +3125,7 @@ namespace Game.Entities
|
||||
stmt.AddValue(index++, transLowGUID);
|
||||
|
||||
StringBuilder ss = new StringBuilder();
|
||||
for (byte i = 0; i < PlayerConst.TaxiMaskSize; ++i)
|
||||
for (int i = 0; i < PlayerConst.TaxiMaskSize; ++i)
|
||||
ss.Append(m_taxi.m_taximask[i] + " ");
|
||||
|
||||
stmt.AddValue(index++, ss.ToString());
|
||||
@@ -3274,7 +3274,7 @@ namespace Game.Entities
|
||||
stmt.AddValue(index++, transLowGUID);
|
||||
|
||||
StringBuilder ss = new StringBuilder();
|
||||
for (byte i = 0; i < PlayerConst.TaxiMaskSize; ++i)
|
||||
for (int i = 0; i < PlayerConst.TaxiMaskSize; ++i)
|
||||
ss.Append(m_taxi.m_taximask[i] + " ");
|
||||
|
||||
stmt.AddValue(index++, ss.ToString());
|
||||
|
||||
@@ -1476,7 +1476,7 @@ namespace Game.Entities
|
||||
if (Convert.ToBoolean(proto.GetFlags2() & ItemFlags2.FactionAlliance) && GetTeam() != Team.Alliance)
|
||||
return InventoryResult.CantEquipEver;
|
||||
|
||||
if ((proto.GetAllowableClass() & getClassMask()) == 0 || (proto.GetAllowableRace() & getRaceMask()) == 0)
|
||||
if ((proto.GetAllowableClass() & getClassMask()) == 0 || (proto.GetAllowableRace() & (long)getRaceMask()) == 0)
|
||||
return InventoryResult.CantEquipEver;
|
||||
|
||||
if (proto.GetRequiredSkill() != 0)
|
||||
@@ -3323,7 +3323,7 @@ namespace Game.Entities
|
||||
return InventoryResult.ItemNotFound;
|
||||
|
||||
// Used by group, function GroupLoot, to know if a prototype can be used by a player
|
||||
if ((proto.GetAllowableClass() & getClassMask()) == 0 || (proto.GetAllowableRace() & getRaceMask()) == 0)
|
||||
if ((proto.GetAllowableClass() & getClassMask()) == 0 || (proto.GetAllowableRace() & (long)getRaceMask()) == 0)
|
||||
return InventoryResult.CantEquipEver;
|
||||
|
||||
if (proto.GetRequiredSpell() != 0 && !HasSpell(proto.GetRequiredSpell()))
|
||||
@@ -6320,7 +6320,7 @@ namespace Game.Entities
|
||||
switch (loot_type)
|
||||
{
|
||||
case LootType.Disenchanting:
|
||||
loot.FillLoot(item.GetTemplate().DisenchantID, LootStorage.Disenchant, this, true);
|
||||
loot.FillLoot(item.GetDisenchantLoot(this).Id, LootStorage.Disenchant, this, true);
|
||||
break;
|
||||
case LootType.Prospecting:
|
||||
loot.FillLoot(item.GetEntry(), LootStorage.Prospecting, this, true);
|
||||
|
||||
@@ -1382,7 +1382,7 @@ namespace Game.Entities
|
||||
if (reqraces == -1)
|
||||
return true;
|
||||
|
||||
if ((reqraces & getRaceMask()) == 0)
|
||||
if ((reqraces & (long)getRaceMask()) == 0)
|
||||
{
|
||||
if (msg)
|
||||
{
|
||||
|
||||
@@ -1573,7 +1573,7 @@ namespace Game.Entities
|
||||
|
||||
void LearnSkillRewardedSpells(uint skillId, uint skillValue)
|
||||
{
|
||||
uint raceMask = getRaceMask();
|
||||
ulong raceMask = getRaceMask();
|
||||
uint classMask = getClassMask();
|
||||
foreach (var ability in CliDB.SkillLineAbilityStorage.Values)
|
||||
{
|
||||
|
||||
@@ -5330,7 +5330,7 @@ namespace Game.Entities
|
||||
if (pet)
|
||||
pet.SynchronizeLevelWithOwner();
|
||||
|
||||
MailLevelReward mailReward = Global.ObjectMgr.GetMailLevelReward(level, getRaceMask());
|
||||
MailLevelReward mailReward = Global.ObjectMgr.GetMailLevelReward(level, (uint)getRaceMask());
|
||||
if (mailReward != null)
|
||||
{
|
||||
//- TODO: Poor design of mail system
|
||||
@@ -7057,7 +7057,7 @@ namespace Game.Entities
|
||||
}
|
||||
public bool IsSpellFitByClassAndRace(uint spell_id)
|
||||
{
|
||||
uint racemask = getRaceMask();
|
||||
ulong racemask = getRaceMask();
|
||||
uint classmask = getClassMask();
|
||||
|
||||
var bounds = Global.SpellMgr.GetSkillLineAbilityMapBounds(spell_id);
|
||||
|
||||
@@ -4185,7 +4185,11 @@ namespace Game.Entities
|
||||
if (castItem != null)
|
||||
{
|
||||
castItemGuid = castItem.GetGUID();
|
||||
castItemLevel = (int)castItem.GetItemLevel(castItem.GetOwner());
|
||||
Player owner = castItem.GetOwner();
|
||||
if (owner)
|
||||
castItemLevel = (int)castItem.GetItemLevel(owner);
|
||||
else if (castItem.GetOwnerGUID() == caster.GetGUID())
|
||||
castItemLevel = (int)castItem.GetItemLevel(caster.ToPlayer());
|
||||
}
|
||||
|
||||
// find current aura from spell and change it's stackamount, or refresh it's duration
|
||||
|
||||
@@ -2126,9 +2126,9 @@ namespace Game.Entities
|
||||
{
|
||||
return (Race)GetByteValue(UnitFields.Bytes0, 0);
|
||||
}
|
||||
public uint getRaceMask()
|
||||
public ulong getRaceMask()
|
||||
{
|
||||
return (uint)(1 << ((int)GetRace() - 1));
|
||||
return (1ul << ((int)GetRace() - 1));
|
||||
}
|
||||
public Class GetClass()
|
||||
{
|
||||
|
||||
@@ -444,7 +444,7 @@ namespace Game
|
||||
_raceUnlockRequirementStorage.Clear();
|
||||
|
||||
// 0 1 2
|
||||
SQLResult result = DB.World.Query("SELECT raceID, expansion, achievementId FROM `race_expansion_requirement`");
|
||||
SQLResult result = DB.World.Query("SELECT raceID, expansion, achievementId FROM `race_unlock_requirement`");
|
||||
if (!result.IsEmpty())
|
||||
{
|
||||
uint count = 0;
|
||||
@@ -4414,9 +4414,7 @@ namespace Game
|
||||
continue;
|
||||
|
||||
var itemTemplate = new ItemTemplate(db2Data, sparse);
|
||||
|
||||
itemTemplate.MaxDurability = FillMaxDurability(db2Data.Class, db2Data.SubClass, sparse.inventoryType, (ItemQuality)sparse.Quality, sparse.ItemLevel);
|
||||
FillDisenchantFields(out itemTemplate.DisenchantID, out itemTemplate.RequiredDisenchantSkill, itemTemplate);
|
||||
|
||||
var itemSpecOverrides = Global.DB2Mgr.GetItemSpecOverrides(sparse.Id);
|
||||
if (itemSpecOverrides != null)
|
||||
@@ -4595,40 +4593,6 @@ namespace Game
|
||||
|
||||
return 5 * (uint)(Math.Round(18.0f * qualityMultipliers[(int)quality] * weaponMultipliers[itemSubClass] * levelPenalty));
|
||||
}
|
||||
void FillDisenchantFields(out uint disenchantID, out uint requiredDisenchantSkill, ItemTemplate itemTemplate)
|
||||
{
|
||||
disenchantID = 0;
|
||||
requiredDisenchantSkill = 0xFFFFFFFF;
|
||||
if (itemTemplate.GetFlags().HasAnyFlag(ItemFlags.Conjured | ItemFlags.NoDisenchant) ||
|
||||
itemTemplate.GetBonding() == ItemBondingType.Quest || itemTemplate.GetArea() != 0 || itemTemplate.GetMap() != 0 ||
|
||||
itemTemplate.GetMaxStackSize() > 1 ||
|
||||
itemTemplate.GetQuality() < ItemQuality.Uncommon || itemTemplate.GetQuality() > ItemQuality.Epic ||
|
||||
!(itemTemplate.GetClass() == ItemClass.Armor || itemTemplate.GetClass() == ItemClass.Weapon) ||
|
||||
!(Item.GetSpecialPrice(itemTemplate) != 0 || Global.DB2Mgr.HasItemCurrencyCost(itemTemplate.GetId())))
|
||||
return;
|
||||
|
||||
foreach (var disenchant in CliDB.ItemDisenchantLootStorage.Values)
|
||||
{
|
||||
if (disenchant.ItemClass == (uint)itemTemplate.GetClass() && disenchant.ItemQuality == (uint)itemTemplate.GetQuality() &&
|
||||
disenchant.MinItemLevel <= itemTemplate.GetBaseItemLevel() && disenchant.MaxItemLevel >= itemTemplate.GetBaseItemLevel())
|
||||
{
|
||||
if (disenchant.Id == 60 || disenchant.Id == 61) // epic item disenchant ilvl range 66-99 (classic)
|
||||
{
|
||||
if (itemTemplate.GetBaseRequiredLevel() > 60 || itemTemplate.GetRequiredSkillRank() > 300)
|
||||
continue; // skip to epic item disenchant ilvl range 90-199 (TBC)
|
||||
}
|
||||
else if (disenchant.Id == 66 || disenchant.Id == 67) // epic item disenchant ilvl range 90-199 (TBC)
|
||||
{
|
||||
if (itemTemplate.GetBaseRequiredLevel() <= 60 || (itemTemplate.GetRequiredSkill() != 0 && itemTemplate.GetRequiredSkillRank() <= 300))
|
||||
continue;
|
||||
}
|
||||
|
||||
disenchantID = disenchant.Id;
|
||||
requiredDisenchantSkill = disenchant.RequiredDisenchantSkill;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
public void LoadItemTemplateAddon()
|
||||
{
|
||||
var time = Time.GetMSTime();
|
||||
@@ -5344,7 +5308,7 @@ namespace Game
|
||||
{
|
||||
for (int raceIndex = (int)Race.Human; raceIndex < (int)Race.Max; ++raceIndex)
|
||||
{
|
||||
if (rcInfo.RaceMask == -1 || Convert.ToBoolean((1 << (raceIndex - 1)) & rcInfo.RaceMask))
|
||||
if (rcInfo.RaceMask == -1 || Convert.ToBoolean((1L << (raceIndex - 1)) & rcInfo.RaceMask))
|
||||
{
|
||||
for (int classIndex = (int)Class.Warrior; classIndex < (int)Class.Max; ++classIndex)
|
||||
{
|
||||
|
||||
@@ -812,6 +812,11 @@ namespace Game.Groups
|
||||
startLootRoll.Method = GetLootMethod();
|
||||
r.FillPacket(startLootRoll.Item);
|
||||
|
||||
ItemDisenchantLootRecord disenchant = r.GetItemDisenchantLoot(p);
|
||||
if (disenchant != null)
|
||||
if (m_maxEnchantingLevel >= disenchant.RequiredDisenchantSkill)
|
||||
startLootRoll.ValidRolls |= RollMask.Disenchant;
|
||||
|
||||
p.SendPacket(startLootRoll);
|
||||
}
|
||||
|
||||
@@ -950,8 +955,6 @@ namespace Game.Groups
|
||||
{
|
||||
r.setLoot(loot);
|
||||
r.itemSlot = itemSlot;
|
||||
if (item.DisenchantID != 0 && m_maxEnchantingLevel >= item.RequiredDisenchantSkill)
|
||||
r.rollTypeMask |= RollMask.Disenchant;
|
||||
|
||||
if (item.GetFlags2().HasAnyFlag(ItemFlags2.CanOnlyRollGreed))
|
||||
r.rollTypeMask &= ~RollMask.Need;
|
||||
@@ -1236,17 +1239,18 @@ namespace Game.Groups
|
||||
item.is_looted = true;
|
||||
roll.getLoot().NotifyItemRemoved(roll.itemSlot);
|
||||
roll.getLoot().unlootedCount--;
|
||||
ItemTemplate pProto = Global.ObjectMgr.GetItemTemplate(roll.itemid);
|
||||
player.UpdateCriteria(CriteriaTypes.CastSpell, 13262); // Disenchant
|
||||
|
||||
ItemDisenchantLootRecord disenchant = roll.GetItemDisenchantLoot(player);
|
||||
|
||||
List<ItemPosCount> dest = new List<ItemPosCount>();
|
||||
InventoryResult msg = player.CanStoreNewItem(ItemConst.NullBag, ItemConst.NullSlot, dest, roll.itemid, item.count);
|
||||
if (msg == InventoryResult.Ok)
|
||||
player.AutoStoreLoot(pProto.DisenchantID, LootStorage.Disenchant, true);
|
||||
player.AutoStoreLoot(disenchant.Id, LootStorage.Disenchant, true);
|
||||
else // If the player's inventory is full, send the disenchant result in a mail.
|
||||
{
|
||||
Loot loot = new Loot();
|
||||
loot.FillLoot(pProto.DisenchantID, LootStorage.Disenchant, player, true);
|
||||
loot.FillLoot(disenchant.Id, LootStorage.Disenchant, player, true);
|
||||
|
||||
uint max_slot = loot.GetMaxSlotInLootFor(player);
|
||||
for (uint i = 0; i < max_slot; ++i)
|
||||
@@ -2620,6 +2624,22 @@ namespace Game.Groups
|
||||
}
|
||||
}
|
||||
|
||||
public ItemDisenchantLootRecord GetItemDisenchantLoot(Player player)
|
||||
{
|
||||
LootItem lootItemInSlot = getTarget().GetItemInSlot(itemSlot);
|
||||
if (lootItemInSlot != null)
|
||||
{
|
||||
ItemInstance itemInstance = new ItemInstance(lootItemInSlot);
|
||||
BonusData bonusData = new BonusData(itemInstance);
|
||||
|
||||
ItemTemplate itemTemplate = Global.ObjectMgr.GetItemTemplate(itemid);
|
||||
uint itemLevel = Item.GetItemLevel(itemTemplate, bonusData, player.getLevel(), 0, lootItemInSlot.upgradeId);
|
||||
return Item.GetDisenchantLoot(itemTemplate, (uint)bonusData.Quality, itemLevel);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public uint itemid;
|
||||
public ItemRandomEnchantmentId itemRandomPropId;
|
||||
public uint itemRandomSuffix;
|
||||
|
||||
@@ -98,7 +98,7 @@ namespace Game
|
||||
bindAppearances.Add((uint)transmogItem.ItemModifiedAppearanceID);
|
||||
|
||||
// add cost
|
||||
cost += itemTransmogrified.GetSpecialPrice();
|
||||
cost += itemTransmogrified.GetSellPrice(_player);
|
||||
}
|
||||
else
|
||||
resetAppearanceItems.Add(itemTransmogrified);
|
||||
|
||||
@@ -217,6 +217,7 @@ namespace Game.Network.Packets
|
||||
data.WriteUInt32(LastPlayedTime);
|
||||
data.WriteUInt16(SpecID);
|
||||
data.WriteUInt32(Unknown703);
|
||||
data.WriteUInt32(LastLoginBuild);
|
||||
data.WriteUInt32(Flags4);
|
||||
data.WriteBits(Name.GetByteCount(), 6);
|
||||
data.WriteBit(FirstLogin);
|
||||
|
||||
@@ -137,7 +137,7 @@ namespace Game.Network.Packets
|
||||
public string VirtualRealmName;
|
||||
public string Guild;
|
||||
public string GuildVirtualRealmName;
|
||||
public long RaceFilter = 0;
|
||||
public long RaceFilter;
|
||||
public int ClassFilter = -1;
|
||||
public List<string> Words = new List<string>();
|
||||
public bool ShowEnemies;
|
||||
|
||||
@@ -117,7 +117,7 @@ namespace Game
|
||||
SoundTurnIn = fields.Read<uint>(102);
|
||||
AreaGroupID = fields.Read<uint>(103);
|
||||
LimitTime = fields.Read<uint>(104);
|
||||
AllowableRaces = fields.Read<int>(105);
|
||||
AllowableRaces = fields.Read<long>(105);
|
||||
QuestRewardID = fields.Read<uint>(106);
|
||||
Expansion = fields.Read<int>(107);
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ namespace Game
|
||||
if (factionEntry == null)
|
||||
return 0;
|
||||
|
||||
uint raceMask = _player.getRaceMask();
|
||||
ulong raceMask = _player.getRaceMask();
|
||||
uint classMask = _player.getClassMask();
|
||||
for (var i = 0; i < 4; i++)
|
||||
{
|
||||
@@ -149,7 +149,7 @@ namespace Game
|
||||
if (factionEntry == null)
|
||||
return 0;
|
||||
|
||||
uint raceMask = _player.getRaceMask();
|
||||
ulong raceMask = _player.getRaceMask();
|
||||
uint classMask = _player.getClassMask();
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
@@ -625,13 +625,13 @@ namespace Game
|
||||
if (factionEntry == null)
|
||||
return 0;
|
||||
|
||||
uint raceMask = (1u << ((int)race - 1));
|
||||
ulong raceMask = (1ul << ((int)race - 1));
|
||||
uint classMask = (1u << ((int)playerClass - 1));
|
||||
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
if ((factionEntry.ReputationClassMask[i] == 0 || factionEntry.ReputationClassMask[i].HasAnyFlag((ushort)classMask))
|
||||
&& (factionEntry.ReputationRaceMask[i] == 0 || factionEntry.ReputationRaceMask[i].HasAnyFlag(raceMask)))
|
||||
&& (factionEntry.ReputationRaceMask[i] == 0 || factionEntry.ReputationRaceMask[i].HasAnyFlag((uint)raceMask)))
|
||||
return factionEntry.ReputationBase[i];
|
||||
}
|
||||
|
||||
|
||||
@@ -6108,30 +6108,23 @@ namespace Game.Spells
|
||||
break;
|
||||
case SpellEffectName.Disenchant:
|
||||
{
|
||||
if (m_targets.GetItemTarget() == null)
|
||||
Item item = m_targets.GetItemTarget();
|
||||
if (!item)
|
||||
return SpellCastResult.CantBeDisenchanted;
|
||||
|
||||
// prevent disenchanting in trade slot
|
||||
if (m_targets.GetItemTarget().GetOwnerGUID() != m_caster.GetGUID())
|
||||
if (item.GetOwnerGUID() != m_caster.GetGUID())
|
||||
return SpellCastResult.CantBeDisenchanted;
|
||||
|
||||
ItemTemplate itemProto = m_targets.GetItemTarget().GetTemplate();
|
||||
ItemTemplate itemProto = item.GetTemplate();
|
||||
if (itemProto == null)
|
||||
return SpellCastResult.CantBeDisenchanted;
|
||||
|
||||
int item_quality = (int)itemProto.GetQuality();
|
||||
// 2.0.x addon: Check player enchanting level against the item disenchanting requirements
|
||||
uint item_disenchantskilllevel = itemProto.RequiredDisenchantSkill;
|
||||
if (item_disenchantskilllevel == Convert.ToUInt32(-1))
|
||||
ItemDisenchantLootRecord itemDisenchantLoot = item.GetDisenchantLoot(m_caster.ToPlayer());
|
||||
if (itemDisenchantLoot == null)
|
||||
return SpellCastResult.CantBeDisenchanted;
|
||||
if (item_disenchantskilllevel > player.GetSkillValue(SkillType.Enchanting))
|
||||
if (itemDisenchantLoot.RequiredDisenchantSkill > player.GetSkillValue(SkillType.Enchanting))
|
||||
return SpellCastResult.LowCastlevel;
|
||||
if (item_quality > 4 || item_quality < 2)
|
||||
return SpellCastResult.CantBeDisenchanted;
|
||||
if (itemProto.GetClass() != ItemClass.Weapon && itemProto.GetClass() != ItemClass.Armor)
|
||||
return SpellCastResult.CantBeDisenchanted;
|
||||
if (itemProto.DisenchantID == 0)
|
||||
return SpellCastResult.CantBeDisenchanted;
|
||||
break;
|
||||
}
|
||||
case SpellEffectName.Prospecting:
|
||||
|
||||
@@ -3740,9 +3740,6 @@ namespace Game.Spells
|
||||
if (effectHandleMode != SpellEffectHandleMode.HitTarget)
|
||||
return;
|
||||
|
||||
if (itemTarget == null || itemTarget.GetTemplate().DisenchantID == 0)
|
||||
return;
|
||||
|
||||
Player caster = m_caster.ToPlayer();
|
||||
if (caster != null)
|
||||
{
|
||||
|
||||
@@ -30,13 +30,12 @@ namespace Game.Spells
|
||||
{
|
||||
public class SpellInfo
|
||||
{
|
||||
public SpellInfo(SpellInfoLoadHelper data, Dictionary<uint, SpellEffectRecord[]> effectsMap, MultiMap<uint, SpellXSpellVisualRecord> visuals, Dictionary<uint, SpellEffectScalingRecord> effectScaling)
|
||||
public SpellInfo(SpellInfoLoadHelper data, Dictionary<uint, SpellEffectRecord[]> effectsMap, MultiMap<uint, SpellXSpellVisualRecord> visuals)
|
||||
{
|
||||
Id = data.Entry.Id;
|
||||
|
||||
_effects = new Dictionary<uint, SpellEffectInfo[]>();
|
||||
|
||||
// SpellDifficultyEntry
|
||||
if (effectsMap != null)
|
||||
{
|
||||
foreach (var pair in effectsMap)
|
||||
@@ -50,8 +49,7 @@ namespace Game.Spells
|
||||
if (effect == null)
|
||||
continue;
|
||||
|
||||
var scaling = effectScaling.LookupByKey(effect.Id);
|
||||
_effects[pair.Key][effect.EffectIndex] = new SpellEffectInfo(scaling, this, effect.EffectIndex, effect);
|
||||
_effects[pair.Key][effect.EffectIndex] = new SpellEffectInfo(this, effect.EffectIndex, effect);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3671,7 +3669,7 @@ namespace Game.Spells
|
||||
|
||||
public class SpellEffectInfo
|
||||
{
|
||||
public SpellEffectInfo(SpellEffectScalingRecord spellEffectScaling, SpellInfo spellInfo, uint effIndex, SpellEffectRecord _effect)
|
||||
public SpellEffectInfo(SpellInfo spellInfo, uint effIndex, SpellEffectRecord _effect)
|
||||
{
|
||||
_spellInfo = spellInfo;
|
||||
EffectIndex = effIndex;
|
||||
@@ -3706,14 +3704,13 @@ namespace Game.Spells
|
||||
TriggerSpell = _effect.EffectTriggerSpell;
|
||||
SpellClassMask = _effect.EffectSpellClassMask;
|
||||
BonusCoefficientFromAP = _effect.BonusCoefficientFromAP;
|
||||
Scaling.Coefficient = _effect.Coefficient;
|
||||
Scaling.Variance = _effect.Variance;
|
||||
Scaling.ResourceCoefficient = _effect.ResourceCoefficient;
|
||||
}
|
||||
|
||||
ImplicitTargetConditions = null;
|
||||
|
||||
Scaling.Coefficient = spellEffectScaling != null ? spellEffectScaling.Coefficient : 0.0f;
|
||||
Scaling.Variance = spellEffectScaling != null ? spellEffectScaling.Variance : 0.0f;
|
||||
Scaling.ResourceCoefficient = spellEffectScaling != null ? spellEffectScaling.ResourceCoefficient : 0.0f;
|
||||
|
||||
_immunityInfo = new ImmunityInfo();
|
||||
}
|
||||
|
||||
|
||||
@@ -1935,7 +1935,6 @@ namespace Game.Entities
|
||||
|
||||
Dictionary<uint, Dictionary<uint, SpellEffectRecord[]>> effectsBySpell = new Dictionary<uint, Dictionary<uint, SpellEffectRecord[]>>();
|
||||
Dictionary<uint, MultiMap<uint, SpellXSpellVisualRecord>> visualsBySpell = new Dictionary<uint, MultiMap<uint, SpellXSpellVisualRecord>>();
|
||||
Dictionary<uint, SpellEffectScalingRecord> spellEffectScallingByEffectId = new Dictionary<uint, SpellEffectScalingRecord>();
|
||||
foreach (var effect in CliDB.SpellEffectStorage.Values)
|
||||
{
|
||||
/*Contract.Assert(effect.EffectIndex < MAX_SPELL_EFFECTS, "MAX_SPELL_EFFECTS must be at least {0}", effect.EffectIndex);
|
||||
@@ -1993,11 +1992,6 @@ namespace Game.Entities
|
||||
}
|
||||
CliDB.SpellCooldownsStorage.Clear();
|
||||
|
||||
foreach (SpellEffectScalingRecord spellEffectScaling in CliDB.SpellEffectScalingStorage.Values)
|
||||
spellEffectScallingByEffectId[spellEffectScaling.SpellEffectID] = spellEffectScaling;
|
||||
|
||||
CliDB.SpellEffectScalingStorage.Clear();
|
||||
|
||||
foreach (SpellEquippedItemsRecord equippedItems in CliDB.SpellEquippedItemsStorage.Values)
|
||||
loadData[equippedItems.SpellID].EquippedItems = equippedItems;
|
||||
|
||||
@@ -2016,6 +2010,10 @@ namespace Game.Entities
|
||||
loadData[levels.SpellID].Levels = levels;
|
||||
}
|
||||
|
||||
foreach (SpellMiscRecord misc in CliDB.SpellMiscStorage.Values)
|
||||
if (misc.DifficultyID == 0)
|
||||
loadData[misc.SpellID].Misc = misc;
|
||||
|
||||
foreach (SpellReagentsRecord reagents in CliDB.SpellReagentsStorage.Values)
|
||||
loadData[reagents.SpellID].Reagents = reagents;
|
||||
|
||||
@@ -2054,8 +2052,7 @@ namespace Game.Entities
|
||||
foreach (var spellEntry in CliDB.SpellStorage.Values)
|
||||
{
|
||||
loadData[spellEntry.Id].Entry = spellEntry;
|
||||
loadData[spellEntry.Id].Misc = CliDB.SpellMiscStorage.LookupByKey(spellEntry.MiscID);
|
||||
mSpellInfoMap[spellEntry.Id] = new SpellInfo(loadData[spellEntry.Id], effectsBySpell.LookupByKey(spellEntry.Id), visualsBySpell.LookupByKey(spellEntry.Id), spellEffectScallingByEffectId);
|
||||
mSpellInfoMap[spellEntry.Id] = new SpellInfo(loadData[spellEntry.Id], effectsBySpell.LookupByKey(spellEntry.Id), visualsBySpell.LookupByKey(spellEntry.Id));
|
||||
}
|
||||
|
||||
CliDB.SpellStorage.Clear();
|
||||
|
||||
@@ -42,8 +42,6 @@ namespace WorldServer
|
||||
if (!ConfigMgr.Load(System.Diagnostics.Process.GetCurrentProcess().ProcessName + ".conf"))
|
||||
ExitNow();
|
||||
|
||||
var WorldSocketMgr = new WorldSocketManager();
|
||||
|
||||
if (!StartDB())
|
||||
ExitNow();
|
||||
|
||||
@@ -66,6 +64,7 @@ namespace WorldServer
|
||||
return;
|
||||
}
|
||||
|
||||
var WorldSocketMgr = new WorldSocketManager();
|
||||
if (!WorldSocketMgr.StartNetwork(worldListener, worldPort, networkThreads))
|
||||
{
|
||||
Log.outError(LogFilter.Network, "Failed to start Realm Network");
|
||||
|
||||
Reference in New Issue
Block a user