Ported .Net Core commits:
hondacrx: - Initial commit: Switch to .Net Core 2.0 - Fix build and removed not needed files Fabi: - Updated solution platforms. - Changed folder structure. - Change library target framework to netstandard2.0. - Updated solution platforms again... - Removed windows specific kernel32 function usage (Ctrl-C handler).
This commit is contained in:
@@ -0,0 +1,218 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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.Constants;
|
||||
using Framework.Database;
|
||||
using Framework.GameMath;
|
||||
using Game.Entities;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public class AreaTriggerDataStorage : Singleton<AreaTriggerDataStorage>
|
||||
{
|
||||
AreaTriggerDataStorage() { }
|
||||
|
||||
public void LoadAreaTriggerTemplates()
|
||||
{
|
||||
uint oldMSTime = Time.GetMSTime();
|
||||
MultiMap<uint, Vector2> verticesByAreaTrigger = new MultiMap<uint, Vector2>();
|
||||
MultiMap<uint, Vector2> verticesTargetByAreaTrigger = new MultiMap<uint, Vector2>();
|
||||
MultiMap<uint, Vector3> splinesBySpellMisc = new MultiMap<uint, Vector3>();
|
||||
MultiMap<uint, AreaTriggerAction> actionsByAreaTrigger = new MultiMap<uint, AreaTriggerAction>();
|
||||
|
||||
// 0 1 2 3
|
||||
SQLResult templateActions = DB.World.Query("SELECT AreaTriggerId, ActionType, ActionParam, TargetType FROM `areatrigger_template_actions`");
|
||||
if (!templateActions.IsEmpty())
|
||||
{
|
||||
do
|
||||
{
|
||||
uint areaTriggerId = templateActions.Read<uint>(0);
|
||||
|
||||
AreaTriggerAction action;
|
||||
action.Param = templateActions.Read<uint>(2);
|
||||
action.ActionType = (AreaTriggerActionTypes)templateActions.Read<uint>(1);
|
||||
action.TargetType = (AreaTriggerActionUserTypes)templateActions.Read<uint>(3);
|
||||
|
||||
if (action.ActionType >= AreaTriggerActionTypes.Max)
|
||||
{
|
||||
Log.outError(LogFilter.Sql, "Table `areatrigger_template_actions` has invalid ActionType ({0}) for AreaTriggerId {1} and Param {2}", action.ActionType, areaTriggerId, action.Param);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (action.TargetType >= AreaTriggerActionUserTypes.Max)
|
||||
{
|
||||
Log.outError(LogFilter.Sql, "Table `areatrigger_template_actions` has invalid TargetType ({0}) for AreaTriggerId {1} and Param {2}", action.TargetType, areaTriggerId, action.Param);
|
||||
continue;
|
||||
}
|
||||
|
||||
actionsByAreaTrigger.Add(areaTriggerId, action);
|
||||
}
|
||||
while (templateActions.NextRow());
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 AreaTrigger templates actions. DB table `areatrigger_template_actions` is empty.");
|
||||
}
|
||||
|
||||
// 0 1 2 3 4 5
|
||||
SQLResult vertices = DB.World.Query("SELECT AreaTriggerId, Idx, VerticeX, VerticeY, VerticeTargetX, VerticeTargetY FROM `areatrigger_template_polygon_vertices` ORDER BY `AreaTriggerId`, `Idx`");
|
||||
if (!vertices.IsEmpty())
|
||||
{
|
||||
do
|
||||
{
|
||||
uint areaTriggerId = vertices.Read<uint>(0);
|
||||
|
||||
verticesByAreaTrigger.Add(areaTriggerId, new Vector2(vertices.Read<float>(2), vertices.Read<float>(3)));
|
||||
|
||||
if (!vertices.IsNull(4) && !vertices.IsNull(5))
|
||||
verticesTargetByAreaTrigger.Add(areaTriggerId, new Vector2(vertices.Read<float>(4), vertices.Read<float>(5)));
|
||||
else if (vertices.IsNull(4) != vertices.IsNull(5))
|
||||
Log.outError(LogFilter.Sql, "Table `areatrigger_template_polygon_vertices` has listed invalid target vertices (AreaTrigger: {0}, Index: {1}).", areaTriggerId, vertices.Read<uint>(1));
|
||||
}
|
||||
while (vertices.NextRow());
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 AreaTrigger templates polygon vertices. DB table `areatrigger_template_polygon_vertices` is empty.");
|
||||
}
|
||||
|
||||
// 0 1 2 3
|
||||
SQLResult splines = DB.World.Query("SELECT SpellMiscId, X, Y, Z FROM `spell_areatrigger_splines` ORDER BY `SpellMiscId`, `Idx`");
|
||||
if (!splines.IsEmpty())
|
||||
{
|
||||
do
|
||||
{
|
||||
uint spellMiscId = splines.Read<uint>(0);
|
||||
|
||||
Vector3 spline = new Vector3(splines.Read<float>(1), splines.Read<float>(2), splines.Read<float>(3));
|
||||
|
||||
splinesBySpellMisc.Add(spellMiscId, spline);
|
||||
}
|
||||
while (splines.NextRow());
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 AreaTrigger templates splines. DB table `spell_areatrigger_splines` is empty.");
|
||||
}
|
||||
|
||||
// 0 1 2 3 4 5 6 7 8 9
|
||||
SQLResult templates = DB.World.Query("SELECT Id, Type, Flags, Data0, Data1, Data2, Data3, Data4, Data5, ScriptName FROM `areatrigger_template`");
|
||||
if (!templates.IsEmpty())
|
||||
{
|
||||
do
|
||||
{
|
||||
AreaTriggerTemplate areaTriggerTemplate = new AreaTriggerTemplate();
|
||||
areaTriggerTemplate.Id = templates.Read<uint>(0);
|
||||
AreaTriggerTypes type = (AreaTriggerTypes)templates.Read<byte>(1);
|
||||
|
||||
if (type >= AreaTriggerTypes.Max)
|
||||
{
|
||||
Log.outError(LogFilter.Sql, "Table `areatrigger_template` has listed areatrigger (Id: {0}) with invalid type {1}.", areaTriggerTemplate.Id, type);
|
||||
continue;
|
||||
}
|
||||
|
||||
areaTriggerTemplate.TriggerType = type;
|
||||
areaTriggerTemplate.Flags = (AreaTriggerFlags)templates.Read<uint>(2);
|
||||
|
||||
unsafe
|
||||
{
|
||||
fixed (float* b = areaTriggerTemplate.DefaultDatas.Data)
|
||||
{
|
||||
for (byte i = 0; i < SharedConst.MaxAreatriggerEntityData; ++i)
|
||||
b[i] = templates.Read<float>(3 + i);
|
||||
}
|
||||
}
|
||||
|
||||
areaTriggerTemplate.ScriptId = Global.ObjectMgr.GetScriptId(templates.Read<string>(9));
|
||||
areaTriggerTemplate.PolygonVertices = verticesByAreaTrigger[areaTriggerTemplate.Id];
|
||||
areaTriggerTemplate.PolygonVerticesTarget = verticesTargetByAreaTrigger[areaTriggerTemplate.Id];
|
||||
areaTriggerTemplate.Actions = actionsByAreaTrigger[areaTriggerTemplate.Id];
|
||||
|
||||
areaTriggerTemplate.InitMaxSearchRadius();
|
||||
_areaTriggerTemplateStore[areaTriggerTemplate.Id] = areaTriggerTemplate;
|
||||
}
|
||||
while (templates.NextRow());
|
||||
}
|
||||
|
||||
// 0 1 2 3 4 5 6 7 8
|
||||
SQLResult areatriggerSpellMiscs = DB.World.Query("SELECT SpellMiscId, AreaTriggerId, MoveCurveId, ScaleCurveId, MorphCurveId, FacingCurveId, DecalPropertiesId, TimeToTarget, TimeToTargetScale FROM `spell_areatrigger`");
|
||||
if (!areatriggerSpellMiscs.IsEmpty())
|
||||
{
|
||||
do
|
||||
{
|
||||
AreaTriggerMiscTemplate miscTemplate = new AreaTriggerMiscTemplate();
|
||||
miscTemplate.MiscId = areatriggerSpellMiscs.Read<uint>(0);
|
||||
|
||||
uint areatriggerId = areatriggerSpellMiscs.Read<uint>(1);
|
||||
miscTemplate.Template = GetAreaTriggerTemplate(areatriggerId);
|
||||
|
||||
if (miscTemplate.Template == null)
|
||||
{
|
||||
Log.outError(LogFilter.Sql, "Table `spell_areatrigger` reference invalid AreaTriggerId {0} for miscId {1}", areatriggerId, miscTemplate.MiscId);
|
||||
continue;
|
||||
}
|
||||
|
||||
Func<uint, uint> ValidateAndSetCurve = value =>
|
||||
{
|
||||
if (value != 0 && !CliDB.CurveStorage.ContainsKey(value))
|
||||
{
|
||||
Log.outError(LogFilter.Sql, "Table `spell_areatrigger` has listed areatrigger (MiscId: {0}, Id: {1}) with invalid Curve ({2}), set to 0!", miscTemplate.MiscId, areatriggerId, value);
|
||||
return 0;
|
||||
}
|
||||
return value;
|
||||
};
|
||||
|
||||
miscTemplate.MoveCurveId = ValidateAndSetCurve(areatriggerSpellMiscs.Read<uint>(2));
|
||||
miscTemplate.ScaleCurveId = ValidateAndSetCurve(areatriggerSpellMiscs.Read<uint>(3));
|
||||
miscTemplate.MorphCurveId = ValidateAndSetCurve(areatriggerSpellMiscs.Read<uint>(4));
|
||||
miscTemplate.FacingCurveId = ValidateAndSetCurve(areatriggerSpellMiscs.Read<uint>(5));
|
||||
|
||||
miscTemplate.DecalPropertiesId = areatriggerSpellMiscs.Read<uint>(6);
|
||||
|
||||
miscTemplate.TimeToTarget = areatriggerSpellMiscs.Read<uint>(7);
|
||||
miscTemplate.TimeToTargetScale = areatriggerSpellMiscs.Read<uint>(8);
|
||||
|
||||
miscTemplate.SplinePoints = splinesBySpellMisc[miscTemplate.MiscId];
|
||||
|
||||
_areaTriggerTemplateSpellMisc[miscTemplate.MiscId] = miscTemplate;
|
||||
}
|
||||
while (areatriggerSpellMiscs.NextRow());
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 Spell AreaTrigger templates. DB table `spell_areatrigger` is empty.");
|
||||
}
|
||||
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loaded {0} spell areatrigger templates in {1} ms.", _areaTriggerTemplateStore.Count, Time.GetMSTimeDiffToNow(oldMSTime));
|
||||
}
|
||||
|
||||
public AreaTriggerTemplate GetAreaTriggerTemplate(uint areaTriggerId)
|
||||
{
|
||||
return _areaTriggerTemplateStore.LookupByKey(areaTriggerId);
|
||||
}
|
||||
|
||||
public AreaTriggerMiscTemplate GetAreaTriggerMiscTemplate(uint spellMiscValue)
|
||||
{
|
||||
return _areaTriggerTemplateSpellMisc.LookupByKey(spellMiscValue);
|
||||
}
|
||||
|
||||
Dictionary<uint, AreaTriggerTemplate> _areaTriggerTemplateStore = new Dictionary<uint, AreaTriggerTemplate>();
|
||||
Dictionary<uint, AreaTriggerMiscTemplate> _areaTriggerTemplateSpellMisc = new Dictionary<uint, AreaTriggerMiscTemplate>();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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.Constants;
|
||||
using Framework.Database;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public class CharacterTemplateDataStorage : Singleton<CharacterTemplateDataStorage>
|
||||
{
|
||||
CharacterTemplateDataStorage() { }
|
||||
|
||||
public void LoadCharacterTemplates()
|
||||
{
|
||||
uint oldMSTime = Time.GetMSTime();
|
||||
_characterTemplateStore.Clear();
|
||||
|
||||
MultiMap<uint, CharacterTemplateClass> characterTemplateClasses = new MultiMap<uint, CharacterTemplateClass>();
|
||||
SQLResult classesResult = DB.World.Query("SELECT TemplateId, FactionGroup, Class FROM character_template_class");
|
||||
if (!classesResult.IsEmpty())
|
||||
{
|
||||
do
|
||||
{
|
||||
uint templateId = classesResult.Read<uint>(0);
|
||||
FactionMasks factionGroup = (FactionMasks)classesResult.Read<byte>(1);
|
||||
byte classID = classesResult.Read<byte>(2);
|
||||
|
||||
if (!((factionGroup & (FactionMasks.Player | FactionMasks.Alliance)) == (FactionMasks.Player | FactionMasks.Alliance)) &&
|
||||
!((factionGroup & (FactionMasks.Player | FactionMasks.Horde)) == (FactionMasks.Player | FactionMasks.Horde)))
|
||||
{
|
||||
Log.outError(LogFilter.Sql, "Faction group {0} defined for character template {1} in `character_template_class` is invalid. Skipped.", factionGroup, templateId);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!CliDB.ChrClassesStorage.ContainsKey(classID))
|
||||
{
|
||||
Log.outError(LogFilter.Sql, "Class {0} defined for character template {1} in `character_template_class` does not exists, skipped.", classID, templateId);
|
||||
continue;
|
||||
}
|
||||
|
||||
characterTemplateClasses.Add(templateId, new CharacterTemplateClass(factionGroup, classID));
|
||||
}
|
||||
while (classesResult.NextRow());
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 character template classes. DB table `character_template_class` is empty.");
|
||||
}
|
||||
|
||||
SQLResult templates = DB.World.Query("SELECT Id, Name, Description, Level FROM character_template");
|
||||
if (templates.IsEmpty())
|
||||
{
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 character templates. DB table `character_template` is empty.");
|
||||
return;
|
||||
}
|
||||
|
||||
do
|
||||
{
|
||||
CharacterTemplate templ = new CharacterTemplate();
|
||||
templ.TemplateSetId = templates.Read<uint>(0);
|
||||
templ.Name = templates.Read<string>(1);
|
||||
templ.Description = templates.Read<string>(2);
|
||||
templ.Level = templates.Read<byte>(3);
|
||||
templ.Classes = characterTemplateClasses[templ.TemplateSetId];
|
||||
|
||||
if (templ.Classes.Empty())
|
||||
{
|
||||
Log.outError(LogFilter.Sql, "Character template {0} does not have any classes defined in `character_template_class`. Skipped.", templ.TemplateSetId);
|
||||
continue;
|
||||
}
|
||||
|
||||
_characterTemplateStore[templ.TemplateSetId] = templ;
|
||||
}
|
||||
while (templates.NextRow());
|
||||
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loaded {0} character templates in {1} ms.", _characterTemplateStore.Count, Time.GetMSTimeDiffToNow(oldMSTime));
|
||||
}
|
||||
|
||||
public Dictionary<uint, CharacterTemplate> GetCharacterTemplates()
|
||||
{
|
||||
return _characterTemplateStore;
|
||||
}
|
||||
|
||||
public CharacterTemplate GetCharacterTemplate(uint templateId)
|
||||
{
|
||||
return _characterTemplateStore.LookupByKey(templateId);
|
||||
}
|
||||
|
||||
Dictionary<uint, CharacterTemplate> _characterTemplateStore = new Dictionary<uint, CharacterTemplate>();
|
||||
}
|
||||
|
||||
public struct CharacterTemplateClass
|
||||
{
|
||||
public CharacterTemplateClass(FactionMasks factionGroup, byte classID)
|
||||
{
|
||||
FactionGroup = factionGroup;
|
||||
ClassID = classID;
|
||||
}
|
||||
|
||||
public FactionMasks FactionGroup;
|
||||
public byte ClassID;
|
||||
}
|
||||
|
||||
public class CharacterTemplate
|
||||
{
|
||||
public uint TemplateSetId;
|
||||
public List<CharacterTemplateClass> Classes;
|
||||
public string Name;
|
||||
public string Description;
|
||||
public byte Level;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,697 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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.Constants;
|
||||
using Framework.Database;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public class CliDB
|
||||
{
|
||||
internal static int LoadedFileCount;
|
||||
internal static string DataPath;
|
||||
|
||||
public static void LoadStores(string dataPath, LocaleConstant defaultLocale)
|
||||
{
|
||||
uint oldMSTime = Time.GetMSTime();
|
||||
LoadedFileCount = 0;
|
||||
|
||||
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);
|
||||
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, HotfixStatements.SEL_SOUND_KIT_LOCALE);
|
||||
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);
|
||||
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);
|
||||
|
||||
foreach (var entry in TaxiPathStorage.Values)
|
||||
{
|
||||
if (!TaxiPathSetBySource.ContainsKey(entry.From))
|
||||
TaxiPathSetBySource.Add(entry.From, new Dictionary<uint, TaxiPathBySourceAndDestination>());
|
||||
TaxiPathSetBySource[entry.From][entry.To] = new TaxiPathBySourceAndDestination(entry.Id, entry.Cost);
|
||||
}
|
||||
|
||||
uint pathCount = TaxiPathStorage.Keys.Max() + 1;
|
||||
|
||||
// Calculate path nodes count
|
||||
uint[] pathLength = new uint[pathCount]; // 0 and some other indexes not used
|
||||
foreach (TaxiPathNodeRecord entry in CliDB.TaxiPathNodeStorage.Values)
|
||||
if (pathLength[entry.PathID] < entry.NodeIndex + 1)
|
||||
pathLength[entry.PathID] = entry.NodeIndex + 1u;
|
||||
|
||||
// Set path length
|
||||
for (uint i = 0; i < pathCount; ++i)
|
||||
TaxiPathNodesByPath[i] = new TaxiPathNodeRecord[pathLength[i]];
|
||||
|
||||
// fill data
|
||||
foreach (var entry in TaxiPathNodeStorage.Values)
|
||||
TaxiPathNodesByPath[entry.PathID][entry.NodeIndex] = entry;
|
||||
|
||||
TaxiPathNodeStorage = null;
|
||||
|
||||
foreach (var node in TaxiNodesStorage.Values)
|
||||
{
|
||||
if (!node.Flags.HasAnyFlag(TaxiNodeFlags.Alliance | TaxiNodeFlags.Horde))
|
||||
continue;
|
||||
|
||||
// valid taxi network node
|
||||
byte field = (byte)((node.Id - 1) / 8);
|
||||
byte submask = (byte)(1 << (int)((node.Id - 1) % 8));
|
||||
|
||||
TaxiNodesMask[field] |= submask;
|
||||
if (node.Flags.HasAnyFlag(TaxiNodeFlags.Horde))
|
||||
HordeTaxiNodesMask[field] |= submask;
|
||||
if (node.Flags.HasAnyFlag(TaxiNodeFlags.Alliance))
|
||||
AllianceTaxiNodesMask[field] |= submask;
|
||||
|
||||
uint nodeMap;
|
||||
Global.DB2Mgr.DeterminaAlternateMapPosition(node.MapID, node.Pos.X, node.Pos.Y, node.Pos.Z, out nodeMap);
|
||||
if (nodeMap < 2)
|
||||
OldContinentsNodesMask[field] |= submask;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
Log.outInfo(LogFilter.ServerLoading, "Initialized {0} DB2 data storages in {1} ms", LoadedFileCount, Time.GetMSTimeDiffToNow(oldMSTime));
|
||||
}
|
||||
|
||||
public static void LoadGameTables(string dataPath)
|
||||
{
|
||||
uint oldMSTime = Time.GetMSTime();
|
||||
LoadedFileCount = 0;
|
||||
|
||||
DataPath = dataPath + "/gt/";
|
||||
|
||||
ArmorMitigationByLvlGameTable = GameTableReader.Read<GtArmorMitigationByLvlRecord>("ArmorMitigationByLvl.txt");
|
||||
ArtifactKnowledgeMultiplierGameTable = GameTableReader.Read<GtArtifactKnowledgeMultiplierRecord>("ArtifactKnowledgeMultiplier.txt");
|
||||
ArtifactLevelXPGameTable = GameTableReader.Read<GtArtifactLevelXPRecord>("artifactLevelXP.txt");
|
||||
BarberShopCostBaseGameTable = GameTableReader.Read<GtBarberShopCostBaseRecord>("BarberShopCostBase.txt");
|
||||
BaseMPGameTable = GameTableReader.Read<GtBaseMPRecord>("BaseMp.txt");
|
||||
CombatRatingsGameTable = GameTableReader.Read<GtCombatRatingsRecord>("CombatRatings.txt");
|
||||
CombatRatingsMultByILvlGameTable = GameTableReader.Read<GtCombatRatingsMultByILvlRecord>("CombatRatingsMultByILvl.txt");
|
||||
ItemSocketCostPerLevelGameTable = GameTableReader.Read<GtItemSocketCostPerLevelRecord>("ItemSocketCostPerLevel.txt");
|
||||
HonorLevelGameTable = GameTableReader.Read<GtHonorLevelRecord>("HonorLevel.txt");
|
||||
HpPerStaGameTable = GameTableReader.Read<GtHpPerStaRecord>("HpPerSta.txt");
|
||||
NpcDamageByClassGameTable[0] = GameTableReader.Read<GtNpcDamageByClassRecord>("NpcDamageByClass.txt");
|
||||
NpcDamageByClassGameTable[1] = GameTableReader.Read<GtNpcDamageByClassRecord>("NpcDamageByClassExp1.txt");
|
||||
NpcDamageByClassGameTable[2] = GameTableReader.Read<GtNpcDamageByClassRecord>("NpcDamageByClassExp2.txt");
|
||||
NpcDamageByClassGameTable[3] = GameTableReader.Read<GtNpcDamageByClassRecord>("NpcDamageByClassExp3.txt");
|
||||
NpcDamageByClassGameTable[4] = GameTableReader.Read<GtNpcDamageByClassRecord>("NpcDamageByClassExp4.txt");
|
||||
NpcDamageByClassGameTable[5] = GameTableReader.Read<GtNpcDamageByClassRecord>("NpcDamageByClassExp5.txt");
|
||||
NpcDamageByClassGameTable[6] = GameTableReader.Read<GtNpcDamageByClassRecord>("NpcDamageByClassExp6.txt");
|
||||
NpcManaCostScalerGameTable = GameTableReader.Read<GtNpcManaCostScalerRecord>("NPCManaCostScaler.txt");
|
||||
NpcTotalHpGameTable[0] = GameTableReader.Read<GtNpcTotalHpRecord>("NpcTotalHp.txt");
|
||||
NpcTotalHpGameTable[1] = GameTableReader.Read<GtNpcTotalHpRecord>("NpcTotalHpExp1.txt");
|
||||
NpcTotalHpGameTable[2] = GameTableReader.Read<GtNpcTotalHpRecord>("NpcTotalHpExp2.txt");
|
||||
NpcTotalHpGameTable[3] = GameTableReader.Read<GtNpcTotalHpRecord>("NpcTotalHpExp3.txt");
|
||||
NpcTotalHpGameTable[4] = GameTableReader.Read<GtNpcTotalHpRecord>("NpcTotalHpExp4.txt");
|
||||
NpcTotalHpGameTable[5] = GameTableReader.Read<GtNpcTotalHpRecord>("NpcTotalHpExp5.txt");
|
||||
NpcTotalHpGameTable[6] = GameTableReader.Read<GtNpcTotalHpRecord>("NpcTotalHpExp6.txt");
|
||||
SpellScalingGameTable = GameTableReader.Read<GtSpellScalingRecord>("SpellScaling.txt");
|
||||
XpGameTable = GameTableReader.Read<GtXpRecord>("xp.txt");
|
||||
|
||||
Log.outInfo(LogFilter.ServerLoading, "Initialized {0} DBC GameTables data stores in {1} ms", LoadedFileCount, Time.GetMSTimeDiffToNow(oldMSTime));
|
||||
}
|
||||
|
||||
#region Main Collections
|
||||
public static DB6Storage<AchievementRecord> AchievementStorage;
|
||||
public static DB6Storage<AnimKitRecord> AnimKitStorage;
|
||||
public static DB6Storage<AreaGroupMemberRecord> AreaGroupMemberStorage;
|
||||
public static DB6Storage<AreaTableRecord> AreaTableStorage;
|
||||
public static DB6Storage<AreaTriggerRecord> AreaTriggerStorage;
|
||||
public static DB6Storage<ArmorLocationRecord> ArmorLocationStorage;
|
||||
public static DB6Storage<ArtifactRecord> ArtifactStorage;
|
||||
public static DB6Storage<ArtifactAppearanceRecord> ArtifactAppearanceStorage;
|
||||
public static DB6Storage<ArtifactAppearanceSetRecord> ArtifactAppearanceSetStorage;
|
||||
public static DB6Storage<ArtifactCategoryRecord> ArtifactCategoryStorage;
|
||||
public static DB6Storage<ArtifactPowerRecord> ArtifactPowerStorage;
|
||||
public static DB6Storage<ArtifactPowerLinkRecord> ArtifactPowerLinkStorage;
|
||||
public static DB6Storage<ArtifactPowerPickerRecord> ArtifactPowerPickerStorage;
|
||||
public static DB6Storage<ArtifactPowerRankRecord> ArtifactPowerRankStorage;
|
||||
//public static DB6Storage<ArtifactQuestXPRecord> ArtifactQuestXPStorage;
|
||||
public static DB6Storage<AuctionHouseRecord> AuctionHouseStorage;
|
||||
public static DB6Storage<BankBagSlotPricesRecord> BankBagSlotPricesStorage;
|
||||
//public static DB6Storage<BannedAddOnsRecord> BannedAddOnsStorage;
|
||||
public static DB6Storage<BarberShopStyleRecord> BarberShopStyleStorage;
|
||||
public static DB6Storage<BattlePetBreedQualityRecord> BattlePetBreedQualityStorage;
|
||||
public static DB6Storage<BattlePetBreedStateRecord> BattlePetBreedStateStorage;
|
||||
public static DB6Storage<BattlePetSpeciesRecord> BattlePetSpeciesStorage;
|
||||
public static DB6Storage<BattlePetSpeciesStateRecord> BattlePetSpeciesStateStorage;
|
||||
public static DB6Storage<BattlemasterListRecord> BattlemasterListStorage;
|
||||
public static DB6Storage<BroadcastTextRecord> BroadcastTextStorage;
|
||||
public static DB6Storage<CharacterFacialHairStylesRecord> CharacterFacialHairStylesStorage;
|
||||
public static DB6Storage<CharBaseSectionRecord> CharBaseSectionStorage;
|
||||
public static DB6Storage<CharSectionsRecord> CharSectionsStorage;
|
||||
public static DB6Storage<CharStartOutfitRecord> CharStartOutfitStorage;
|
||||
public static DB6Storage<CharTitlesRecord> CharTitlesStorage;
|
||||
public static DB6Storage<ChatChannelsRecord> ChatChannelsStorage;
|
||||
public static DB6Storage<ChrClassesRecord> ChrClassesStorage;
|
||||
public static DB6Storage<ChrClassesXPowerTypesRecord> ChrClassesXPowerTypesStorage;
|
||||
public static DB6Storage<ChrRacesRecord> ChrRacesStorage;
|
||||
public static DB6Storage<ChrSpecializationRecord> ChrSpecializationStorage;
|
||||
public static DB6Storage<CinematicCameraRecord> CinematicCameraStorage;
|
||||
public static DB6Storage<CinematicSequencesRecord> CinematicSequencesStorage;
|
||||
public static DB6Storage<ConversationLineRecord> ConversationLineStorage;
|
||||
public static DB6Storage<CreatureDisplayInfoRecord> CreatureDisplayInfoStorage;
|
||||
public static DB6Storage<CreatureDisplayInfoExtraRecord> CreatureDisplayInfoExtraStorage;
|
||||
public static DB6Storage<CreatureFamilyRecord> CreatureFamilyStorage;
|
||||
public static DB6Storage<CreatureModelDataRecord> CreatureModelDataStorage;
|
||||
public static DB6Storage<CreatureTypeRecord> CreatureTypeStorage;
|
||||
public static DB6Storage<CriteriaRecord> CriteriaStorage;
|
||||
public static DB6Storage<CriteriaTreeRecord> CriteriaTreeStorage;
|
||||
public static DB6Storage<CurrencyTypesRecord> CurrencyTypesStorage;
|
||||
public static DB6Storage<CurveRecord> CurveStorage;
|
||||
public static DB6Storage<CurvePointRecord> CurvePointStorage;
|
||||
public static DB6Storage<DestructibleModelDataRecord> DestructibleModelDataStorage;
|
||||
public static DB6Storage<DifficultyRecord> DifficultyStorage;
|
||||
public static DB6Storage<DungeonEncounterRecord> DungeonEncounterStorage;
|
||||
public static DB6Storage<DurabilityCostsRecord> DurabilityCostsStorage;
|
||||
public static DB6Storage<DurabilityQualityRecord> DurabilityQualityStorage;
|
||||
public static DB6Storage<EmotesRecord> EmotesStorage;
|
||||
public static DB6Storage<EmotesTextRecord> EmotesTextStorage;
|
||||
public static DB6Storage<EmotesTextSoundRecord> EmotesTextSoundStorage;
|
||||
public static DB6Storage<FactionRecord> FactionStorage;
|
||||
public static DB6Storage<FactionTemplateRecord> FactionTemplateStorage;
|
||||
public static DB6Storage<GameObjectsRecord> GameObjectsStorage;
|
||||
public static DB6Storage<GameObjectDisplayInfoRecord> GameObjectDisplayInfoStorage;
|
||||
public static DB6Storage<GarrAbilityRecord> GarrAbilityStorage;
|
||||
public static DB6Storage<GarrBuildingRecord> GarrBuildingStorage;
|
||||
public static DB6Storage<GarrBuildingPlotInstRecord> GarrBuildingPlotInstStorage;
|
||||
public static DB6Storage<GarrClassSpecRecord> GarrClassSpecStorage;
|
||||
public static DB6Storage<GarrFollowerRecord> GarrFollowerStorage;
|
||||
public static DB6Storage<GarrFollowerXAbilityRecord> GarrFollowerXAbilityStorage;
|
||||
public static DB6Storage<GarrPlotBuildingRecord> GarrPlotBuildingStorage;
|
||||
public static DB6Storage<GarrPlotRecord> GarrPlotStorage;
|
||||
public static DB6Storage<GarrPlotInstanceRecord> GarrPlotInstanceStorage;
|
||||
public static DB6Storage<GarrSiteLevelRecord> GarrSiteLevelStorage;
|
||||
public static DB6Storage<GarrSiteLevelPlotInstRecord> GarrSiteLevelPlotInstStorage;
|
||||
public static DB6Storage<GemPropertiesRecord> GemPropertiesStorage;
|
||||
public static DB6Storage<GlyphBindableSpellRecord> GlyphBindableSpellStorage;
|
||||
public static DB6Storage<GlyphPropertiesRecord> GlyphPropertiesStorage;
|
||||
public static DB6Storage<GlyphRequiredSpecRecord> GlyphRequiredSpecStorage;
|
||||
public static DB6Storage<GuildColorBackgroundRecord> GuildColorBackgroundStorage;
|
||||
public static DB6Storage<GuildColorBorderRecord> GuildColorBorderStorage;
|
||||
public static DB6Storage<GuildColorEmblemRecord> GuildColorEmblemStorage;
|
||||
public static DB6Storage<GuildPerkSpellsRecord> GuildPerkSpellsStorage;
|
||||
public static DB6Storage<HeirloomRecord> HeirloomStorage;
|
||||
public static DB6Storage<HolidaysRecord> HolidaysStorage;
|
||||
public static DB6Storage<ImportPriceArmorRecord> ImportPriceArmorStorage;
|
||||
public static DB6Storage<ImportPriceQualityRecord> ImportPriceQualityStorage;
|
||||
public static DB6Storage<ImportPriceShieldRecord> ImportPriceShieldStorage;
|
||||
public static DB6Storage<ImportPriceWeaponRecord> ImportPriceWeaponStorage;
|
||||
public static DB6Storage<ItemAppearanceRecord> ItemAppearanceStorage;
|
||||
public static DB6Storage<ItemArmorQualityRecord> ItemArmorQualityStorage;
|
||||
public static DB6Storage<ItemArmorShieldRecord> ItemArmorShieldStorage;
|
||||
public static DB6Storage<ItemArmorTotalRecord> ItemArmorTotalStorage;
|
||||
//public static DB6Storage<ItemBagFamilyRecord> ItemBagFamilyStorage;
|
||||
public static DB6Storage<ItemBonusRecord> ItemBonusStorage;
|
||||
public static DB6Storage<ItemBonusListLevelDeltaRecord> ItemBonusListLevelDeltaStorage;
|
||||
public static DB6Storage<ItemBonusTreeNodeRecord> ItemBonusTreeNodeStorage;
|
||||
public static DB6Storage<ItemClassRecord> ItemClassStorage;
|
||||
public static DB6Storage<ItemChildEquipmentRecord> ItemChildEquipmentStorage;
|
||||
public static DB6Storage<ItemCurrencyCostRecord> ItemCurrencyCostStorage;
|
||||
public static DB6Storage<ItemDamageRecord> ItemDamageAmmoStorage;
|
||||
public static DB6Storage<ItemDamageRecord> ItemDamageOneHandStorage;
|
||||
public static DB6Storage<ItemDamageRecord> ItemDamageOneHandCasterStorage;
|
||||
public static DB6Storage<ItemDamageRecord> ItemDamageTwoHandStorage;
|
||||
public static DB6Storage<ItemDamageRecord> ItemDamageTwoHandCasterStorage;
|
||||
public static DB6Storage<ItemDisenchantLootRecord> ItemDisenchantLootStorage;
|
||||
public static DB6Storage<ItemEffectRecord> ItemEffectStorage;
|
||||
public static DB6Storage<ItemRecord> ItemStorage;
|
||||
public static DB6Storage<ItemExtendedCostRecord> ItemExtendedCostStorage;
|
||||
public static DB6Storage<ItemLevelSelectorRecord> ItemLevelSelectorStorage;
|
||||
public static DB6Storage<ItemLimitCategoryRecord> ItemLimitCategoryStorage;
|
||||
public static DB6Storage<ItemModifiedAppearanceRecord> ItemModifiedAppearanceStorage;
|
||||
public static DB6Storage<ItemPriceBaseRecord> ItemPriceBaseStorage;
|
||||
public static DB6Storage<ItemRandomPropertiesRecord> ItemRandomPropertiesStorage;
|
||||
public static DB6Storage<ItemRandomSuffixRecord> ItemRandomSuffixStorage;
|
||||
public static DB6Storage<ItemSearchNameRecord> ItemSearchNameStorage;
|
||||
public static DB6Storage<ItemSetRecord> ItemSetStorage;
|
||||
public static DB6Storage<ItemSetSpellRecord> ItemSetSpellStorage;
|
||||
public static DB6Storage<ItemSparseRecord> ItemSparseStorage;
|
||||
public static DB6Storage<ItemSpecRecord> ItemSpecStorage;
|
||||
public static DB6Storage<ItemSpecOverrideRecord> ItemSpecOverrideStorage;
|
||||
public static DB6Storage<ItemUpgradeRecord> ItemUpgradeStorage;
|
||||
public static DB6Storage<ItemXBonusTreeRecord> ItemXBonusTreeStorage;
|
||||
//public static DB6Storage<KeyChainRecord> KeyChainStorage;
|
||||
public static DB6Storage<LfgDungeonsRecord> LfgDungeonsStorage;
|
||||
public static DB6Storage<LightRecord> LightStorage;
|
||||
public static DB6Storage<LiquidTypeRecord> LiquidTypeStorage;
|
||||
public static DB6Storage<LockRecord> LockStorage;
|
||||
public static DB6Storage<MailTemplateRecord> MailTemplateStorage;
|
||||
public static DB6Storage<MapRecord> MapStorage;
|
||||
public static DB6Storage<MapDifficultyRecord> MapDifficultyStorage;
|
||||
public static DB6Storage<ModifierTreeRecord> ModifierTreeStorage;
|
||||
public static DB6Storage<MountCapabilityRecord> MountCapabilityStorage;
|
||||
public static DB6Storage<MountRecord> MountStorage;
|
||||
public static DB6Storage<MountTypeXCapabilityRecord> MountTypeXCapabilityStorage;
|
||||
public static DB6Storage<MountXDisplayRecord> MountXDisplayStorage;
|
||||
public static DB6Storage<MovieRecord> MovieStorage;
|
||||
public static DB6Storage<NameGenRecord> NameGenStorage;
|
||||
public static DB6Storage<NamesProfanityRecord> NamesProfanityStorage;
|
||||
public static DB6Storage<NamesReservedRecord> NamesReservedStorage;
|
||||
public static DB6Storage<NamesReservedLocaleRecord> NamesReservedLocaleStorage;
|
||||
public static DB6Storage<OverrideSpellDataRecord> OverrideSpellDataStorage;
|
||||
public static DB6Storage<PhaseRecord> PhaseStorage;
|
||||
public static DB6Storage<PhaseXPhaseGroupRecord> PhaseXPhaseGroupStorage;
|
||||
public static DB6Storage<PlayerConditionRecord> PlayerConditionStorage;
|
||||
public static DB6Storage<PowerDisplayRecord> PowerDisplayStorage;
|
||||
public static DB6Storage<PowerTypeRecord> PowerTypeStorage;
|
||||
public static DB6Storage<PrestigeLevelInfoRecord> PrestigeLevelInfoStorage;
|
||||
public static DB6Storage<PvpDifficultyRecord> PvpDifficultyStorage;
|
||||
public static DB6Storage<PvpRewardRecord> PvpRewardStorage;
|
||||
public static DB6Storage<QuestFactionRewardRecord> QuestFactionRewardStorage;
|
||||
public static DB6Storage<QuestMoneyRewardRecord> QuestMoneyRewardStorage;
|
||||
public static DB6Storage<QuestPackageItemRecord> QuestPackageItemStorage;
|
||||
public static DB6Storage<QuestSortRecord> QuestSortStorage;
|
||||
public static DB6Storage<QuestV2Record> QuestV2Storage;
|
||||
public static DB6Storage<QuestXPRecord> QuestXPStorage;
|
||||
public static DB6Storage<RandPropPointsRecord> RandPropPointsStorage;
|
||||
public static DB6Storage<RewardPackRecord> RewardPackStorage;
|
||||
public static DB6Storage<RewardPackXItemRecord> RewardPackXItemStorage;
|
||||
public static DB6Storage<RulesetItemUpgradeRecord> RulesetItemUpgradeStorage;
|
||||
public static DB6Storage<ScalingStatDistributionRecord> ScalingStatDistributionStorage;
|
||||
public static DB6Storage<ScenarioRecord> ScenarioStorage;
|
||||
public static DB6Storage<ScenarioStepRecord> ScenarioStepStorage;
|
||||
//public static DB6Storage<SceneScriptRecord> SceneScriptStorage;
|
||||
public static DB6Storage<SceneScriptPackageRecord> SceneScriptPackageStorage;
|
||||
public static DB6Storage<SkillLineRecord> SkillLineStorage;
|
||||
public static DB6Storage<SkillLineAbilityRecord> SkillLineAbilityStorage;
|
||||
public static DB6Storage<SkillRaceClassInfoRecord> SkillRaceClassInfoStorage;
|
||||
public static DB6Storage<SoundKitRecord> SoundKitStorage;
|
||||
public static DB6Storage<SpecializationSpellsRecord> SpecializationSpellsStorage;
|
||||
public static DB6Storage<SpellRecord> SpellStorage;
|
||||
public static DB6Storage<SpellAuraOptionsRecord> SpellAuraOptionsStorage;
|
||||
public static DB6Storage<SpellAuraRestrictionsRecord> SpellAuraRestrictionsStorage;
|
||||
public static DB6Storage<SpellCastTimesRecord> SpellCastTimesStorage;
|
||||
public static DB6Storage<SpellCastingRequirementsRecord> SpellCastingRequirementsStorage;
|
||||
public static DB6Storage<SpellCategoriesRecord> SpellCategoriesStorage;
|
||||
public static DB6Storage<SpellCategoryRecord> SpellCategoryStorage;
|
||||
public static DB6Storage<SpellClassOptionsRecord> SpellClassOptionsStorage;
|
||||
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;
|
||||
public static DB6Storage<SpellItemEnchantmentRecord> SpellItemEnchantmentStorage;
|
||||
public static DB6Storage<SpellItemEnchantmentConditionRecord> SpellItemEnchantmentConditionStorage;
|
||||
public static DB6Storage<SpellLearnSpellRecord> SpellLearnSpellStorage;
|
||||
public static DB6Storage<SpellLevelsRecord> SpellLevelsStorage;
|
||||
public static DB6Storage<SpellMiscRecord> SpellMiscStorage;
|
||||
public static DB6Storage<SpellPowerRecord> SpellPowerStorage;
|
||||
public static DB6Storage<SpellPowerDifficultyRecord> SpellPowerDifficultyStorage;
|
||||
public static DB6Storage<SpellProcsPerMinuteRecord> SpellProcsPerMinuteStorage;
|
||||
public static DB6Storage<SpellProcsPerMinuteModRecord> SpellProcsPerMinuteModStorage;
|
||||
public static DB6Storage<SpellRadiusRecord> SpellRadiusStorage;
|
||||
public static DB6Storage<SpellRangeRecord> SpellRangeStorage;
|
||||
public static DB6Storage<SpellReagentsRecord> SpellReagentsStorage;
|
||||
public static DB6Storage<SpellScalingRecord> SpellScalingStorage;
|
||||
public static DB6Storage<SpellShapeshiftRecord> SpellShapeshiftStorage;
|
||||
public static DB6Storage<SpellShapeshiftFormRecord> SpellShapeshiftFormStorage;
|
||||
public static DB6Storage<SpellTargetRestrictionsRecord> SpellTargetRestrictionsStorage;
|
||||
public static DB6Storage<SpellTotemsRecord> SpellTotemsStorage;
|
||||
public static DB6Storage<SpellXSpellVisualRecord> SpellXSpellVisualStorage;
|
||||
public static DB6Storage<SummonPropertiesRecord> SummonPropertiesStorage;
|
||||
//public static DB6Storage<TactKeyRecord> TactKeyStorage;
|
||||
public static DB6Storage<TalentRecord> TalentStorage;
|
||||
public static DB6Storage<TaxiNodesRecord> TaxiNodesStorage;
|
||||
public static DB6Storage<TaxiPathRecord> TaxiPathStorage;
|
||||
public static DB6Storage<TaxiPathNodeRecord> TaxiPathNodeStorage;
|
||||
public static DB6Storage<TotemCategoryRecord> TotemCategoryStorage;
|
||||
public static DB6Storage<ToyRecord> ToyStorage;
|
||||
public static DB6Storage<TransmogHolidayRecord> TransmogHolidayStorage;
|
||||
public static DB6Storage<TransmogSetRecord> TransmogSetStorage;
|
||||
public static DB6Storage<TransmogSetGroupRecord> TransmogSetGroupStorage;
|
||||
public static DB6Storage<TransmogSetItemRecord> TransmogSetItemStorage;
|
||||
public static DB6Storage<TransportAnimationRecord> TransportAnimationStorage;
|
||||
public static DB6Storage<TransportRotationRecord> TransportRotationStorage;
|
||||
public static DB6Storage<UnitPowerBarRecord> UnitPowerBarStorage;
|
||||
public static DB6Storage<VehicleRecord> VehicleStorage;
|
||||
public static DB6Storage<VehicleSeatRecord> VehicleSeatStorage;
|
||||
public static DB6Storage<WMOAreaTableRecord> WMOAreaTableStorage;
|
||||
public static DB6Storage<WorldMapAreaRecord> WorldMapAreaStorage;
|
||||
public static DB6Storage<WorldMapOverlayRecord> WorldMapOverlayStorage;
|
||||
public static DB6Storage<WorldMapTransformsRecord> WorldMapTransformsStorage;
|
||||
public static DB6Storage<WorldSafeLocsRecord> WorldSafeLocsStorage;
|
||||
#endregion
|
||||
|
||||
#region GameTables
|
||||
public static GameTable<GtArmorMitigationByLvlRecord> ArmorMitigationByLvlGameTable;
|
||||
public static GameTable<GtArtifactKnowledgeMultiplierRecord> ArtifactKnowledgeMultiplierGameTable;
|
||||
public static GameTable<GtArtifactLevelXPRecord> ArtifactLevelXPGameTable;
|
||||
public static GameTable<GtBarberShopCostBaseRecord> BarberShopCostBaseGameTable;
|
||||
public static GameTable<GtBaseMPRecord> BaseMPGameTable;
|
||||
public static GameTable<GtCombatRatingsRecord> CombatRatingsGameTable;
|
||||
public static GameTable<GtCombatRatingsMultByILvlRecord> CombatRatingsMultByILvlGameTable;
|
||||
public static GameTable<GtHonorLevelRecord> HonorLevelGameTable;
|
||||
public static GameTable<GtHpPerStaRecord> HpPerStaGameTable;
|
||||
public static GameTable<GtItemSocketCostPerLevelRecord> ItemSocketCostPerLevelGameTable;
|
||||
public static GameTable<GtNpcDamageByClassRecord>[] NpcDamageByClassGameTable = new GameTable<GtNpcDamageByClassRecord>[(int)Expansion.Max];
|
||||
public static GameTable<GtNpcManaCostScalerRecord> NpcManaCostScalerGameTable;
|
||||
public static GameTable<GtNpcTotalHpRecord>[] NpcTotalHpGameTable = new GameTable<GtNpcTotalHpRecord>[(int)Expansion.Max];
|
||||
public static GameTable<GtSpellScalingRecord> SpellScalingGameTable;
|
||||
public static GameTable<GtXpRecord> XpGameTable;
|
||||
#endregion
|
||||
|
||||
#region Taxi Collections
|
||||
public static byte[] TaxiNodesMask = new byte[PlayerConst.TaxiMaskSize];
|
||||
public static byte[] OldContinentsNodesMask = new byte[PlayerConst.TaxiMaskSize];
|
||||
public static byte[] HordeTaxiNodesMask = new byte[PlayerConst.TaxiMaskSize];
|
||||
public static byte[] AllianceTaxiNodesMask = new byte[PlayerConst.TaxiMaskSize];
|
||||
public static Dictionary<uint, Dictionary<uint, TaxiPathBySourceAndDestination>> TaxiPathSetBySource = new Dictionary<uint, Dictionary<uint, TaxiPathBySourceAndDestination>>();
|
||||
public static Dictionary<uint, TaxiPathNodeRecord[]> TaxiPathNodesByPath = new Dictionary<uint, TaxiPathNodeRecord[]>();
|
||||
#endregion
|
||||
|
||||
#region Helper Methods
|
||||
public static float GetGameTableColumnForClass(dynamic row, Class class_)
|
||||
{
|
||||
switch (class_)
|
||||
{
|
||||
case Class.Warrior:
|
||||
return row.Warrior;
|
||||
case Class.Paladin:
|
||||
return row.Paladin;
|
||||
case Class.Hunter:
|
||||
return row.Hunter;
|
||||
case Class.Rogue:
|
||||
return row.Rogue;
|
||||
case Class.Priest:
|
||||
return row.Priest;
|
||||
case Class.Deathknight:
|
||||
return row.DeathKnight;
|
||||
case Class.Shaman:
|
||||
return row.Shaman;
|
||||
case Class.Mage:
|
||||
return row.Mage;
|
||||
case Class.Warlock:
|
||||
return row.Warlock;
|
||||
case Class.Monk:
|
||||
return row.Monk;
|
||||
case Class.Druid:
|
||||
return row.Druid;
|
||||
case Class.DemonHunter:
|
||||
return row.DemonHunter;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
public static float GetSpellScalingColumnForClass(GtSpellScalingRecord row, int class_)
|
||||
{
|
||||
switch (class_)
|
||||
{
|
||||
case (int)Class.Warrior:
|
||||
return row.Warrior;
|
||||
case (int)Class.Paladin:
|
||||
return row.Paladin;
|
||||
case (int)Class.Hunter:
|
||||
return row.Hunter;
|
||||
case (int)Class.Rogue:
|
||||
return row.Rogue;
|
||||
case (int)Class.Priest:
|
||||
return row.Priest;
|
||||
case (int)Class.Deathknight:
|
||||
return row.DeathKnight;
|
||||
case (int)Class.Shaman:
|
||||
return row.Shaman;
|
||||
case (int)Class.Mage:
|
||||
return row.Mage;
|
||||
case (int)Class.Warlock:
|
||||
return row.Warlock;
|
||||
case (int)Class.Monk:
|
||||
return row.Monk;
|
||||
case (int)Class.Druid:
|
||||
return row.Druid;
|
||||
case (int)Class.DemonHunter:
|
||||
return row.DemonHunter;
|
||||
case -1:
|
||||
return row.Item;
|
||||
case -2:
|
||||
return row.Consumable;
|
||||
case -3:
|
||||
return row.Gem1;
|
||||
case -4:
|
||||
return row.Gem2;
|
||||
case -5:
|
||||
return row.Gem3;
|
||||
case -6:
|
||||
return row.Health;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return 0.0f;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,760 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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));
|
||||
break;
|
||||
case 2: // 1 bytes
|
||||
_commandData[i].Add(id, reader.ReadBytes(1));
|
||||
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);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,630 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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(13, 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 });
|
||||
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(0, new byte[] { 1, 1, 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, 2, 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 });
|
||||
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, 2, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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 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 });
|
||||
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 });
|
||||
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 });
|
||||
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 });
|
||||
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, 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, 4 });
|
||||
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, 1 });
|
||||
public static DB6Meta GarrUiAnimClassInfoMeta = new DB6Meta(-1, new byte[] { 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 });
|
||||
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, 3, 3, 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 });
|
||||
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(-1, 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, 3, 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 ItemVisualEffectsMeta = new DB6Meta(-1, new byte[] { 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 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 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 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 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 NpcModelItemSlotDisplayInfoMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1 });
|
||||
public static DB6Meta ObjectEffectMeta = new DB6Meta(-1, new byte[] { 1, 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(-1, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 4, 1, 1, 1, 1, 1, 1, 4, 4, 4, 1, 4, 4, 4, 2, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 4, 4, 4, 1, 4, 1, 4, 6, 1, 1, 1, 2, 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(3, 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 ResearchBranchMeta = new DB6Meta(-1, new byte[] { 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 });
|
||||
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 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(16, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
|
||||
public static DB6Meta SoundKitAdvancedMeta = 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 });
|
||||
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 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, 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(7, new byte[] { 1, 3, 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 });
|
||||
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 SpellVisualKitMeta = new DB6Meta(-1, 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, 1 });
|
||||
public static DB6Meta StringLookupsMeta = new DB6Meta(-1, new byte[] { 1, 1 });
|
||||
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(8, new byte[] { 3, 1, 2, 2, 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 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(-1, new byte[] { 1, 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, 5, 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, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 8, 1, 3, 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 VocalUISoundsMeta = new DB6Meta(-1, new byte[] { 1, 1, 1, 1, 2 });
|
||||
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 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 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 });
|
||||
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(15, new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 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 });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,346 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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.Constants;
|
||||
using Framework.Database;
|
||||
using Framework.GameMath;
|
||||
using Framework.IO;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public interface IDB2Storage
|
||||
{
|
||||
bool HasRecord(uint id);
|
||||
|
||||
void WriteRecord(uint id, LocaleConstant locale, ByteBuffer buffer);
|
||||
|
||||
void EraseRecord(uint id);
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public class DB6Storage<T> : Dictionary<uint, T>, IDB2Storage where T : new()
|
||||
{
|
||||
public void LoadData(uint indexField, DBClientHelper[] 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 obj = new T();
|
||||
int index = 0;
|
||||
for (var fieldIndex = 0; fieldIndex < helpers.Length; fieldIndex++)
|
||||
{
|
||||
var helper = helpers[fieldIndex];
|
||||
if (helper.IsArray)
|
||||
{
|
||||
Array array = (Array)helper.Getter(obj);
|
||||
for (var i = 0; i < array.Length; ++i)
|
||||
{
|
||||
switch (Type.GetTypeCode(helper.RealType))
|
||||
{
|
||||
case TypeCode.SByte:
|
||||
helper.SetValue(array, result.Read<sbyte>(index++), i);
|
||||
break;
|
||||
case TypeCode.Byte:
|
||||
helper.SetValue(array, result.Read<byte>(index++), i);
|
||||
break;
|
||||
case TypeCode.Int16:
|
||||
helper.SetValue(array, result.Read<short>(index++), i);
|
||||
break;
|
||||
case TypeCode.UInt16:
|
||||
helper.SetValue(array, result.Read<ushort>(index++), i);
|
||||
break;
|
||||
case TypeCode.Int32:
|
||||
helper.SetValue(array, result.Read<int>(index++), i);
|
||||
break;
|
||||
case TypeCode.UInt32:
|
||||
helper.SetValue(array, result.Read<uint>(index++), i);
|
||||
break;
|
||||
case TypeCode.Single:
|
||||
helper.SetValue(array, result.Read<float>(index++), i);
|
||||
break;
|
||||
case TypeCode.String:
|
||||
helper.SetValue(array, result.Read<string>(index++), i);
|
||||
break;
|
||||
case TypeCode.Object:
|
||||
switch (helper.FieldType.Name)
|
||||
{
|
||||
case "Vector2":
|
||||
var vector2 = new Vector2();
|
||||
vector2.X = result.Read<float>(index++);
|
||||
vector2.Y = result.Read<float>(index++);
|
||||
helper.SetValue(array, vector2, i);
|
||||
break;
|
||||
case "Vector3":
|
||||
var vector3 = new Vector3();
|
||||
vector3.X = result.Read<float>(index++);
|
||||
vector3.Y = result.Read<float>(index++);
|
||||
vector3.Z = result.Read<float>(index++);
|
||||
helper.SetValue(array, vector3, i);
|
||||
break;
|
||||
case "LocalizedString":
|
||||
LocalizedString locString = new LocalizedString();
|
||||
locString[Global.WorldMgr.GetDefaultDbcLocale()] = result.Read<string>(index++);
|
||||
helper.SetValue(array, locString, i);
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (Type.GetTypeCode(helper.RealType))
|
||||
{
|
||||
case TypeCode.SByte:
|
||||
helper.SetValue(obj, result.Read<sbyte>(index++));
|
||||
break;
|
||||
case TypeCode.Byte:
|
||||
helper.SetValue(obj, result.Read<byte>(index++));
|
||||
break;
|
||||
case TypeCode.Int16:
|
||||
helper.SetValue(obj, result.Read<short>(index++));
|
||||
break;
|
||||
case TypeCode.UInt16:
|
||||
helper.SetValue(obj, result.Read<ushort>(index++));
|
||||
break;
|
||||
case TypeCode.Int32:
|
||||
helper.SetValue(obj, result.Read<int>(index++));
|
||||
break;
|
||||
case TypeCode.UInt32:
|
||||
helper.SetValue(obj, result.Read<uint>(index++));
|
||||
break;
|
||||
case TypeCode.Single:
|
||||
helper.SetValue(obj, result.Read<float>(index++));
|
||||
break;
|
||||
case TypeCode.String:
|
||||
string str = result.Read<string>(index++);
|
||||
helper.SetValue(obj, str);
|
||||
break;
|
||||
case TypeCode.Object:
|
||||
switch (helper.FieldType.Name)
|
||||
{
|
||||
case "Vector2":
|
||||
var vector2 = new Vector2();
|
||||
vector2.X = result.Read<float>(index++);
|
||||
vector2.Y = result.Read<float>(index++);
|
||||
helper.SetValue(obj, vector2);
|
||||
break;
|
||||
case "Vector3":
|
||||
var vector3 = new Vector3();
|
||||
vector3.X = result.Read<float>(index++);
|
||||
vector3.Y = result.Read<float>(index++);
|
||||
vector3.Z = result.Read<float>(index++);
|
||||
helper.SetValue(obj, vector3);
|
||||
break;
|
||||
case "LocalizedString":
|
||||
LocalizedString locString = new LocalizedString();
|
||||
locString[Global.WorldMgr.GetDefaultDbcLocale()] = result.Read<string>(index++);
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
base[idValue] = obj;
|
||||
}
|
||||
while (result.NextRow());
|
||||
}
|
||||
|
||||
if (preparedStatementLocale == 0)
|
||||
return;
|
||||
|
||||
for (LocaleConstant locale = 0; locale < LocaleConstant.OldTotal; ++locale)
|
||||
{
|
||||
if (Global.WorldMgr.GetDefaultDbcLocale() == locale || locale == LocaleConstant.None)
|
||||
continue;
|
||||
|
||||
PreparedStatement stmt = DB.Hotfix.GetPreparedStatement(preparedStatementLocale);
|
||||
stmt.AddValue(0, locale.ToString());
|
||||
SQLResult localeResult = DB.Hotfix.Query(stmt);
|
||||
if (localeResult.IsEmpty())
|
||||
continue;
|
||||
|
||||
do
|
||||
{
|
||||
int index = 0;
|
||||
var obj = this.LookupByKey(localeResult.Read<uint>(index++));
|
||||
if (obj == null)
|
||||
continue;
|
||||
|
||||
for (var i = 0; i < helpers.Length; i++)
|
||||
{
|
||||
var fieldInfo = helpers[i];
|
||||
if (fieldInfo.FieldType != typeof(LocalizedString))
|
||||
continue;
|
||||
|
||||
LocalizedString locString = (LocalizedString)fieldInfo.Getter(obj);
|
||||
locString[locale] = localeResult.Read<string>(index++);
|
||||
}
|
||||
} while (localeResult.NextRow());
|
||||
}
|
||||
}
|
||||
|
||||
public bool HasRecord(uint id)
|
||||
{
|
||||
return ContainsKey(id);
|
||||
}
|
||||
|
||||
public void WriteRecord(uint id, LocaleConstant locale, ByteBuffer buffer)
|
||||
{
|
||||
T entry = this.LookupByKey(id);
|
||||
|
||||
foreach (var fieldInfo in entry.GetType().GetFields())
|
||||
{
|
||||
if (fieldInfo.Name == "Id")
|
||||
continue;
|
||||
|
||||
var type = fieldInfo.FieldType;
|
||||
if (type.IsArray)
|
||||
{
|
||||
WriteArrayValues(entry, fieldInfo, buffer);
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (Type.GetTypeCode(type))
|
||||
{
|
||||
case TypeCode.Boolean:
|
||||
buffer.WriteUInt8(fieldInfo.GetValue(entry));
|
||||
break;
|
||||
case TypeCode.SByte:
|
||||
buffer.WriteInt8(fieldInfo.GetValue(entry));
|
||||
break;
|
||||
case TypeCode.Byte:
|
||||
buffer.WriteUInt8(fieldInfo.GetValue(entry));
|
||||
break;
|
||||
case TypeCode.Int16:
|
||||
buffer.WriteInt16(fieldInfo.GetValue(entry));
|
||||
break;
|
||||
case TypeCode.UInt16:
|
||||
buffer.WriteUInt16(fieldInfo.GetValue(entry));
|
||||
break;
|
||||
case TypeCode.Int32:
|
||||
buffer.WriteInt32(fieldInfo.GetValue(entry));
|
||||
break;
|
||||
case TypeCode.UInt32:
|
||||
buffer.WriteUInt32(fieldInfo.GetValue(entry));
|
||||
break;
|
||||
case TypeCode.Int64:
|
||||
buffer.WriteInt64(fieldInfo.GetValue(entry));
|
||||
break;
|
||||
case TypeCode.UInt64:
|
||||
buffer.WriteUInt64(fieldInfo.GetValue(entry));
|
||||
break;
|
||||
case TypeCode.Single:
|
||||
buffer.WriteFloat(fieldInfo.GetValue(entry));
|
||||
break;
|
||||
case TypeCode.Object:
|
||||
switch (type.Name)
|
||||
{
|
||||
case "LocalizedString":
|
||||
LocalizedString locStr = (LocalizedString)fieldInfo.GetValue(entry);
|
||||
if (!locStr.HasString(locale))
|
||||
{
|
||||
locale = 0;
|
||||
if (!locStr.HasString(locale))
|
||||
{
|
||||
buffer.WriteUInt16(0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
string str = locStr[locale];
|
||||
buffer.WriteCString(str);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void WriteArrayValues(object entry, FieldInfo fieldInfo, ByteBuffer buffer)
|
||||
{
|
||||
var type = fieldInfo.FieldType.GetElementType();
|
||||
var array = (Array)fieldInfo.GetValue(entry);
|
||||
for (var i = 0; i < array.Length; ++i)
|
||||
{
|
||||
switch (Type.GetTypeCode(type))
|
||||
{
|
||||
case TypeCode.Boolean:
|
||||
buffer.WriteUInt8(array.GetValue(i));
|
||||
break;
|
||||
case TypeCode.SByte:
|
||||
buffer.WriteInt8(array.GetValue(i));
|
||||
break;
|
||||
case TypeCode.Byte:
|
||||
buffer.WriteUInt8(array.GetValue(i));
|
||||
break;
|
||||
case TypeCode.Int16:
|
||||
buffer.WriteInt16(array.GetValue(i));
|
||||
break;
|
||||
case TypeCode.UInt16:
|
||||
buffer.WriteUInt16(array.GetValue(i));
|
||||
break;
|
||||
case TypeCode.Int32:
|
||||
buffer.WriteInt32(array.GetValue(i));
|
||||
break;
|
||||
case TypeCode.UInt32:
|
||||
buffer.WriteUInt32(array.GetValue(i));
|
||||
break;
|
||||
case TypeCode.Int64:
|
||||
buffer.WriteInt64(array.GetValue(i));
|
||||
break;
|
||||
case TypeCode.UInt64:
|
||||
buffer.WriteUInt64(array.GetValue(i));
|
||||
break;
|
||||
case TypeCode.Single:
|
||||
buffer.WriteFloat(array.GetValue(i));
|
||||
break;
|
||||
case TypeCode.String:
|
||||
var str = (string)array.GetValue(i);
|
||||
buffer.WriteCString(str);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void EraseRecord(uint id)
|
||||
{
|
||||
Remove(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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.Collections.Generic;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public class GameTable<T> where T : new()
|
||||
{
|
||||
public T GetRow(uint row)
|
||||
{
|
||||
if (row >= _data.Count)
|
||||
return default(T);
|
||||
|
||||
return _data[(int)row];
|
||||
}
|
||||
|
||||
public int GetTableRowCount() { return _data.Count; }
|
||||
|
||||
public void SetData(List<T> data) { _data = data; }
|
||||
|
||||
List<T> _data = new List<T>();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,212 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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.Database;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public class ConversationDataStorage : Singleton<ConversationDataStorage>
|
||||
{
|
||||
ConversationDataStorage() { }
|
||||
|
||||
public void LoadConversationTemplates()
|
||||
{
|
||||
_conversationActorTemplateStorage.Clear();
|
||||
_conversationLineTemplateStorage.Clear();
|
||||
_conversationTemplateStorage.Clear();
|
||||
|
||||
Dictionary<uint, ConversationActorTemplate[]> actorsByConversation = new Dictionary<uint, ConversationActorTemplate[]>();
|
||||
|
||||
SQLResult actorTemplates = DB.World.Query("SELECT Id, CreatureId, CreatureModelId FROM conversation_actor_template");
|
||||
if (!actorTemplates.IsEmpty())
|
||||
{
|
||||
uint oldMSTime = Time.GetMSTime();
|
||||
|
||||
do
|
||||
{
|
||||
uint id = actorTemplates.Read<uint>(0);
|
||||
ConversationActorTemplate conversationActor = new ConversationActorTemplate();
|
||||
conversationActor.Id = id;
|
||||
conversationActor.CreatureId = actorTemplates.Read<uint>(1);
|
||||
conversationActor.CreatureModelId = actorTemplates.Read<uint>(2);
|
||||
|
||||
_conversationActorTemplateStorage[id] = conversationActor;
|
||||
}
|
||||
while (actorTemplates.NextRow());
|
||||
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loaded {0} Conversation actor templates in {1} ms", _conversationActorTemplateStorage.Count, Time.GetMSTimeDiffToNow(oldMSTime));
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 Conversation actor templates. DB table `conversation_actor_template` is empty.");
|
||||
}
|
||||
|
||||
SQLResult lineTemplates = DB.World.Query("SELECT Id, StartTime, UiCameraID, ActorIdx, Unk FROM conversation_line_template");
|
||||
if (!lineTemplates.IsEmpty())
|
||||
{
|
||||
uint oldMSTime = Time.GetMSTime();
|
||||
|
||||
do
|
||||
{
|
||||
uint id = lineTemplates.Read<uint>(0);
|
||||
|
||||
if (!CliDB.ConversationLineStorage.ContainsKey(id))
|
||||
{
|
||||
Log.outError(LogFilter.Sql, "Table `conversation_line_template` has template for non existing ConversationLine (ID: {0}), skipped", id);
|
||||
continue;
|
||||
}
|
||||
|
||||
ConversationLineTemplate conversationLine = new ConversationLineTemplate();
|
||||
conversationLine.Id = id;
|
||||
conversationLine.StartTime = lineTemplates.Read<uint>(1);
|
||||
conversationLine.UiCameraID = lineTemplates.Read<uint>(2);
|
||||
conversationLine.ActorIdx = lineTemplates.Read<ushort>(3);
|
||||
conversationLine.Unk = lineTemplates.Read<ushort>(4);
|
||||
|
||||
_conversationLineTemplateStorage[id] = conversationLine;
|
||||
}
|
||||
while (lineTemplates.NextRow());
|
||||
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loaded {0} Conversation line templates in {1} ms", _conversationLineTemplateStorage.Count, Time.GetMSTimeDiffToNow(oldMSTime));
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 Conversation line templates. DB table `conversation_line_template` is empty.");
|
||||
}
|
||||
|
||||
SQLResult actorResult = DB.World.Query("SELECT ConversationId, ConversationActorId, Idx FROM conversation_actors");
|
||||
if (!actorResult.IsEmpty())
|
||||
{
|
||||
uint oldMSTime = Time.GetMSTime();
|
||||
uint count = 0;
|
||||
|
||||
do
|
||||
{
|
||||
uint conversationId = actorResult.Read<uint>(0);
|
||||
uint actorId = actorResult.Read<uint>(1);
|
||||
ushort idx = actorResult.Read<ushort>(2);
|
||||
|
||||
ConversationActorTemplate conversationActorTemplate = _conversationActorTemplateStorage.LookupByKey(actorId);
|
||||
if (conversationActorTemplate != null)
|
||||
{
|
||||
if (!actorsByConversation.ContainsKey(conversationId))
|
||||
actorsByConversation[conversationId] = new ConversationActorTemplate[idx + 1];
|
||||
|
||||
ConversationActorTemplate[] actors = actorsByConversation[conversationId];
|
||||
if (actors.Length <= idx)
|
||||
Array.Resize(ref actors, idx + 1);
|
||||
|
||||
actors[idx] = conversationActorTemplate;
|
||||
++count;
|
||||
}
|
||||
else
|
||||
Log.outError(LogFilter.Sql, "Table `conversation_actors` references an invalid actor (ID: {0}) for Conversation {1}, skipped", actorId, conversationId);
|
||||
}
|
||||
while (actorResult.NextRow());
|
||||
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loaded {0} Conversation actors in {1} ms", count, Time.GetMSTimeDiffToNow(oldMSTime));
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 Conversation actors. DB table `conversation_actors` is empty.");
|
||||
}
|
||||
|
||||
SQLResult templateResult = DB.World.Query("SELECT Id, FirstLineId, LastLineEndTime, VerifiedBuild FROM conversation_template");
|
||||
if (!templateResult.IsEmpty())
|
||||
{
|
||||
uint oldMSTime = Time.GetMSTime();
|
||||
|
||||
do
|
||||
{
|
||||
ConversationTemplate conversationTemplate = new ConversationTemplate();
|
||||
conversationTemplate.Id = templateResult.Read<uint>(0);
|
||||
conversationTemplate.FirstLineId = templateResult.Read<uint>(1);
|
||||
conversationTemplate.LastLineEndTime = templateResult.Read<uint>(2);
|
||||
|
||||
conversationTemplate.Actors = actorsByConversation[conversationTemplate.Id].ToList();
|
||||
|
||||
ConversationLineRecord currentConversationLine = CliDB.ConversationLineStorage.LookupByKey(conversationTemplate.FirstLineId);
|
||||
if (currentConversationLine == null)
|
||||
Log.outError(LogFilter.Sql, "Table `conversation_template` references an invalid line (ID: {0}) for Conversation {1}, skipped", conversationTemplate.FirstLineId, conversationTemplate.Id);
|
||||
|
||||
while (currentConversationLine != null)
|
||||
{
|
||||
ConversationLineTemplate conversationLineTemplate = _conversationLineTemplateStorage.LookupByKey(currentConversationLine.Id);
|
||||
if (conversationLineTemplate != null)
|
||||
conversationTemplate.Lines.Add(conversationLineTemplate);
|
||||
else
|
||||
Log.outError(LogFilter.Sql, "Table `conversation_line_template` has missing template for line (ID: {0}) in Conversation {1}, skipped", currentConversationLine.Id, conversationTemplate.Id);
|
||||
|
||||
if (currentConversationLine.NextLineID == 0)
|
||||
break;
|
||||
|
||||
currentConversationLine = CliDB.ConversationLineStorage.LookupByKey(currentConversationLine.NextLineID);
|
||||
}
|
||||
|
||||
_conversationTemplateStorage[conversationTemplate.Id] = conversationTemplate;
|
||||
}
|
||||
while (templateResult.NextRow());
|
||||
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loaded {0} Conversation templates in {1} ms", _conversationTemplateStorage.Count, Time.GetMSTimeDiffToNow(oldMSTime));
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 Conversation templates. DB table `conversation_template` is empty.");
|
||||
}
|
||||
}
|
||||
|
||||
public ConversationTemplate GetConversationTemplate(uint conversationId)
|
||||
{
|
||||
return _conversationTemplateStorage.LookupByKey(conversationId);
|
||||
}
|
||||
|
||||
Dictionary<uint, ConversationTemplate> _conversationTemplateStorage = new Dictionary<uint, ConversationTemplate>();
|
||||
Dictionary<uint, ConversationActorTemplate> _conversationActorTemplateStorage = new Dictionary<uint, ConversationActorTemplate>();
|
||||
Dictionary<uint, ConversationLineTemplate> _conversationLineTemplateStorage = new Dictionary<uint, ConversationLineTemplate>();
|
||||
}
|
||||
|
||||
public class ConversationActorTemplate
|
||||
{
|
||||
public uint Id;
|
||||
public uint CreatureId;
|
||||
public uint CreatureModelId;
|
||||
}
|
||||
|
||||
public class ConversationLineTemplate
|
||||
{
|
||||
public uint Id; // Link to ConversationLine.db2
|
||||
public uint StartTime; // Time in ms after conversation creation the line is displayed
|
||||
public uint UiCameraID; // Link to UiCamera.db2
|
||||
public ushort ActorIdx; // Index from conversation_actors
|
||||
public ushort Unk;
|
||||
}
|
||||
|
||||
public class ConversationTemplate
|
||||
{
|
||||
public uint Id;
|
||||
public uint FirstLineId; // Link to ConversationLine.db2
|
||||
public uint LastLineEndTime; // Time in ms after conversation creation the last line fades out
|
||||
|
||||
public List<ConversationActorTemplate> Actors = new List<ConversationActorTemplate>();
|
||||
public List<ConversationLineTemplate> Lines = new List<ConversationLineTemplate>();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,227 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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.GameMath;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public class M2Storage
|
||||
{
|
||||
// Convert the geomoetry from a spline value, to an actual WoW XYZ
|
||||
static Vector3 translateLocation(Vector4 dbcLocation, Vector3 basePosition, Vector3 splineVector)
|
||||
{
|
||||
Vector3 work = new Vector3();
|
||||
float x = basePosition.X + splineVector.X;
|
||||
float y = basePosition.Y + splineVector.Y;
|
||||
float z = basePosition.Z + splineVector.Z;
|
||||
float distance = (float)Math.Sqrt((x * x) + (y * y));
|
||||
float angle = (float)Math.Atan2(x, y) - dbcLocation.W;
|
||||
|
||||
if (angle < 0)
|
||||
angle += 2 * MathFunctions.PI;
|
||||
|
||||
work.X = dbcLocation.X + (distance * (float)Math.Sin(angle));
|
||||
work.Y = dbcLocation.Y + (distance * (float)Math.Cos(angle));
|
||||
work.Z = dbcLocation.Z + z;
|
||||
return work;
|
||||
}
|
||||
|
||||
// Number of cameras not used. Multiple cameras never used in 7.1.5
|
||||
static void readCamera(M2Camera cam, uint buffSize, BinaryReader buffer, CinematicCameraRecord dbcentry)
|
||||
{
|
||||
List<FlyByCamera> cameras = new List<FlyByCamera>();
|
||||
List<FlyByCamera> targetcam = new List<FlyByCamera>();
|
||||
|
||||
Vector4 dbcData = new Vector4(dbcentry.Origin.X, dbcentry.Origin.Y, dbcentry.Origin.Z, dbcentry.OriginFacing);
|
||||
|
||||
// Read target locations, only so that we can calculate orientation
|
||||
for (uint k = 0; k < cam.target_positions.timestamps.number; ++k)
|
||||
{
|
||||
// Extract Target positions
|
||||
M2Array targTsArray = new M2Array(buffer, cam.target_positions.timestamps.offset_elements);
|
||||
|
||||
buffer.BaseStream.Position = targTsArray.offset_elements;
|
||||
uint[] targTimestamps = new uint[targTsArray.number];
|
||||
for (var i = 0; i < targTsArray.number; ++i)
|
||||
targTimestamps[i] = buffer.ReadUInt32();
|
||||
|
||||
M2Array targArray = new M2Array(buffer, cam.target_positions.values.offset_elements);
|
||||
|
||||
buffer.BaseStream.Position = targArray.offset_elements;
|
||||
M2SplineKey[] targPositions = new M2SplineKey[targArray.number];
|
||||
for (var i = 0; i < targArray.number; ++i)
|
||||
targPositions[i] = new M2SplineKey(buffer);
|
||||
|
||||
// Read the data for this set
|
||||
uint currPos = targArray.offset_elements;
|
||||
for (uint i = 0; i < targTsArray.number; ++i)
|
||||
{
|
||||
// Translate co-ordinates
|
||||
Vector3 newPos = translateLocation(dbcData, cam.target_position_base, targPositions[i].p0);
|
||||
|
||||
// Add to vector
|
||||
FlyByCamera thisCam = new FlyByCamera();
|
||||
thisCam.timeStamp = targTimestamps[i];
|
||||
thisCam.locations = new Vector4(newPos.X, newPos.Y, newPos.Z, 0.0f);
|
||||
targetcam.Add(thisCam);
|
||||
currPos += (uint)Marshal.SizeOf<M2SplineKey>();
|
||||
}
|
||||
}
|
||||
|
||||
// Read camera positions and timestamps (translating first position of 3 only, we don't need to translate the whole spline)
|
||||
for (uint k = 0; k < cam.positions.timestamps.number; ++k)
|
||||
{
|
||||
// Extract Camera positions for this set
|
||||
M2Array posTsArray = buffer.ReadStruct<M2Array>(cam.positions.timestamps.offset_elements);
|
||||
|
||||
buffer.BaseStream.Position = posTsArray.offset_elements;
|
||||
uint[] posTimestamps = new uint[posTsArray.number];
|
||||
for (var i = 0; i < posTsArray.number; ++i)
|
||||
posTimestamps[i] = buffer.ReadUInt32();
|
||||
|
||||
M2Array posArray = new M2Array(buffer, cam.positions.values.offset_elements);
|
||||
|
||||
buffer.BaseStream.Position = posArray.offset_elements;
|
||||
M2SplineKey[] positions = new M2SplineKey[posTsArray.number];
|
||||
for (var i = 0; i < posTsArray.number; ++i)
|
||||
positions[i] = new M2SplineKey(buffer);
|
||||
|
||||
// Read the data for this set
|
||||
uint currPos = posArray.offset_elements;
|
||||
for (uint i = 0; i < posTsArray.number; ++i)
|
||||
{
|
||||
// Translate co-ordinates
|
||||
Vector3 newPos = translateLocation(dbcData, cam.position_base, positions[i].p0);
|
||||
|
||||
// Add to vector
|
||||
FlyByCamera thisCam = new FlyByCamera();
|
||||
thisCam.timeStamp = posTimestamps[i];
|
||||
thisCam.locations = new Vector4(newPos.X, newPos.Y, newPos.Z, 0);
|
||||
|
||||
if (targetcam.Count > 0)
|
||||
{
|
||||
// Find the target camera before and after this camera
|
||||
FlyByCamera lastTarget;
|
||||
FlyByCamera nextTarget;
|
||||
|
||||
// Pre-load first item
|
||||
lastTarget = targetcam[0];
|
||||
nextTarget = targetcam[0];
|
||||
for (int j = 0; j < targetcam.Count; ++j)
|
||||
{
|
||||
nextTarget = targetcam[j];
|
||||
if (targetcam[j].timeStamp > posTimestamps[i])
|
||||
break;
|
||||
|
||||
lastTarget = targetcam[j];
|
||||
}
|
||||
|
||||
float x = lastTarget.locations.X;
|
||||
float y = lastTarget.locations.Y;
|
||||
float z = lastTarget.locations.Z;
|
||||
|
||||
// Now, the timestamps for target cam and position can be different. So, if they differ we interpolate
|
||||
if (lastTarget.timeStamp != posTimestamps[i])
|
||||
{
|
||||
uint timeDiffTarget = nextTarget.timeStamp - lastTarget.timeStamp;
|
||||
uint timeDiffThis = posTimestamps[i] - lastTarget.timeStamp;
|
||||
float xDiff = nextTarget.locations.X - lastTarget.locations.X;
|
||||
float yDiff = nextTarget.locations.Y - lastTarget.locations.Y;
|
||||
float zDiff = nextTarget.locations.Z - lastTarget.locations.Z;
|
||||
x = lastTarget.locations.X + (xDiff * (timeDiffThis / timeDiffTarget));
|
||||
y = lastTarget.locations.Y + (yDiff * (timeDiffThis / timeDiffTarget));
|
||||
z = lastTarget.locations.Z + (zDiff * (timeDiffThis / timeDiffTarget));
|
||||
}
|
||||
float xDiff1 = x - thisCam.locations.X;
|
||||
float yDiff1 = y - thisCam.locations.Y;
|
||||
thisCam.locations.W = (float)Math.Atan2(yDiff1, xDiff1);
|
||||
|
||||
if (thisCam.locations.W < 0)
|
||||
thisCam.locations.W += 2 * MathFunctions.PI;
|
||||
}
|
||||
|
||||
cameras.Add(thisCam);
|
||||
currPos += (uint)Marshal.SizeOf<M2SplineKey>();
|
||||
}
|
||||
}
|
||||
|
||||
FlyByCameraStorage[dbcentry.ID] = cameras;
|
||||
}
|
||||
|
||||
public static void LoadM2Cameras(string dataPath)
|
||||
{
|
||||
FlyByCameraStorage.Clear();
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loading Cinematic Camera files");
|
||||
|
||||
uint oldMSTime = Time.GetMSTime();
|
||||
foreach (CinematicCameraRecord cameraEntry in CliDB.CinematicCameraStorage.Values)
|
||||
{
|
||||
string filename = dataPath + "/cameras/" + string.Format("FILE{0:x8}.xxx", cameraEntry.ModelFileDataID);
|
||||
|
||||
try
|
||||
{
|
||||
using (BinaryReader m2file = new BinaryReader(new FileStream(filename, FileMode.Open, FileAccess.Read)))
|
||||
{
|
||||
// Check file has correct magic (MD21)
|
||||
if (m2file.ReadStringFromChars(4) != "MD21")
|
||||
{
|
||||
Log.outError(LogFilter.ServerLoading, "Camera file {0} is damaged. File identifier not found.", filename);
|
||||
continue;
|
||||
}
|
||||
|
||||
var unknownSize = m2file.ReadUInt32(); //unknown size
|
||||
|
||||
// Read header
|
||||
M2Header header = m2file.ReadStruct<M2Header>();
|
||||
var buffer = new BinaryReader(new MemoryStream(m2file.ToByteArray(), 8, (int)(m2file.BaseStream.Length - 8)));
|
||||
|
||||
// Get camera(s) - Main header, then dump them.
|
||||
M2Camera cam = m2file.ReadStruct<M2Camera>(8 + header.ofsCameras);
|
||||
|
||||
readCamera(cam, (uint)m2file.BaseStream.Length - 8, buffer, cameraEntry);
|
||||
}
|
||||
}
|
||||
catch (EndOfStreamException)
|
||||
{
|
||||
Log.outError(LogFilter.ServerLoading, "Camera file {0} is damaged. Camera references position beyond file end", filename);
|
||||
}
|
||||
catch (FileNotFoundException)
|
||||
{
|
||||
Log.outError(LogFilter.ServerLoading, "File {0} not found!!!!", filename);
|
||||
}
|
||||
}
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loaded {0} cinematic waypoint sets in {1} ms", FlyByCameraStorage.Count, Time.GetMSTimeDiffToNow(oldMSTime));
|
||||
}
|
||||
|
||||
public static List<FlyByCamera> GetFlyByCameras(uint cameraId)
|
||||
{
|
||||
return FlyByCameraStorage.LookupByKey(cameraId);
|
||||
}
|
||||
|
||||
static MultiMap<uint, FlyByCamera> FlyByCameraStorage = new MultiMap<uint, FlyByCamera>();
|
||||
}
|
||||
|
||||
public class FlyByCamera
|
||||
{
|
||||
public uint timeStamp;
|
||||
public Vector4 locations;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,221 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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.Constants;
|
||||
using Framework.GameMath;
|
||||
using System;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public class AchievementRecord
|
||||
{
|
||||
public LocalizedString Title;
|
||||
public LocalizedString Description;
|
||||
public AchievementFlags Flags;
|
||||
public LocalizedString Reward;
|
||||
public short MapID;
|
||||
public ushort Supercedes;
|
||||
public ushort Category;
|
||||
public ushort UiOrder;
|
||||
public ushort SharesCriteria;
|
||||
public ushort CriteriaTree;
|
||||
public AchievementFaction Faction;
|
||||
public byte Points;
|
||||
public byte MinimumCriteria;
|
||||
public uint Id;
|
||||
public uint IconFileDataID;
|
||||
}
|
||||
|
||||
public sealed class AnimKitRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint OneShotDuration;
|
||||
public ushort OneShotStopAnimKitID;
|
||||
public ushort LowDefAnimKitID;
|
||||
}
|
||||
|
||||
public sealed class AreaGroupMemberRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ushort AreaGroupID;
|
||||
public ushort AreaID;
|
||||
}
|
||||
|
||||
public sealed class AreaTableRecord
|
||||
{
|
||||
public uint Id;
|
||||
public AreaFlags[] Flags = new AreaFlags[2];
|
||||
public string ZoneName;
|
||||
public float AmbientMultiplier;
|
||||
public LocalizedString AreaName;
|
||||
public ushort MapId;
|
||||
public ushort ParentAreaID;
|
||||
public short AreaBit;
|
||||
public ushort AmbienceID;
|
||||
public ushort ZoneMusic;
|
||||
public ushort IntroSound;
|
||||
public ushort[] LiquidTypeID = new ushort[4];
|
||||
public ushort UWZoneMusic;
|
||||
public ushort UWAmbience;
|
||||
public ushort PvPCombastWorldStateID;
|
||||
public byte SoundProviderPref;
|
||||
public byte SoundProviderPrefUnderwater;
|
||||
public byte ExplorationLevel;
|
||||
public byte FactionGroupMask;
|
||||
public byte MountFlags;
|
||||
public byte WildBattlePetLevelMin;
|
||||
public byte WildBattlePetLevelMax;
|
||||
public byte WindSettingsID;
|
||||
public byte[] UWIntroSound = new byte[2];
|
||||
|
||||
public bool IsSanctuary()
|
||||
{
|
||||
if (MapId == 609)
|
||||
return true;
|
||||
|
||||
return Flags[0].HasAnyFlag(AreaFlags.Sanctuary);
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class AreaTriggerRecord
|
||||
{
|
||||
public Vector3 Pos;
|
||||
public float Radius;
|
||||
public float BoxLength;
|
||||
public float BoxWidth;
|
||||
public float BoxHeight;
|
||||
public float BoxYaw;
|
||||
public ushort MapID;
|
||||
public ushort PhaseID;
|
||||
public ushort PhaseGroupID;
|
||||
public ushort ShapeID;
|
||||
public ushort AreaTriggerActionSetID;
|
||||
public byte PhaseUseFlags;
|
||||
public byte ShapeType;
|
||||
public byte Flags;
|
||||
public uint Id;
|
||||
}
|
||||
|
||||
public sealed class ArmorLocationRecord
|
||||
{
|
||||
public uint Id;
|
||||
public float[] Modifier = new float[5];
|
||||
}
|
||||
|
||||
public sealed class ArtifactRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
public uint BarConnectedColor;
|
||||
public uint BarDisconnectedColor;
|
||||
public uint TitleColor;
|
||||
public ushort ClassUiTextureKitID;
|
||||
public ushort SpecID;
|
||||
public byte ArtifactCategoryID;
|
||||
public byte Flags;
|
||||
public uint UiModelSceneID;
|
||||
public uint SpellVisualKitID;
|
||||
}
|
||||
|
||||
public sealed class ArtifactAppearanceRecord
|
||||
{
|
||||
public LocalizedString Name;
|
||||
public uint SwatchColor;
|
||||
public float ModelDesaturation;
|
||||
public float ModelAlpha;
|
||||
public uint ShapeshiftDisplayID;
|
||||
public ushort ArtifactAppearanceSetID;
|
||||
public ushort Unknown;
|
||||
public byte DisplayIndex;
|
||||
public byte AppearanceModID;
|
||||
public byte Flags;
|
||||
public byte ModifiesShapeshiftFormDisplay;
|
||||
public uint Id;
|
||||
public uint PlayerConditionID;
|
||||
public uint ItemAppearanceID;
|
||||
public uint AltItemAppearanceID;
|
||||
}
|
||||
|
||||
public sealed class ArtifactAppearanceSetRecord
|
||||
{
|
||||
public LocalizedString Name;
|
||||
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 sealed class ArtifactCategoryRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ushort ArtifactKnowledgeCurrencyID;
|
||||
public ushort ArtifactKnowledgeMultiplierCurveID;
|
||||
}
|
||||
|
||||
public sealed class ArtifactPowerRecord
|
||||
{
|
||||
public Vector2 Pos;
|
||||
public byte ArtifactID;
|
||||
public ArtifactPowerFlag Flags;
|
||||
public byte MaxRank;
|
||||
public byte ArtifactTier;
|
||||
public uint Id;
|
||||
public int RelicType;
|
||||
}
|
||||
|
||||
public sealed class ArtifactPowerLinkRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ushort FromArtifactPowerID;
|
||||
public ushort ToArtifactPowerID;
|
||||
}
|
||||
|
||||
public sealed class ArtifactPowerPickerRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint PlayerConditionID;
|
||||
}
|
||||
|
||||
public sealed class ArtifactPowerRankRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public float Value;
|
||||
public ushort ArtifactPowerID;
|
||||
public ushort Unknown;
|
||||
public byte Rank;
|
||||
}
|
||||
|
||||
public sealed class ArtifactQuestXPRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint[] Exp = new uint[10];
|
||||
}
|
||||
|
||||
public sealed class AuctionHouseRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
public ushort FactionID;
|
||||
public byte DepositRate;
|
||||
public byte ConsignmentRate;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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 sealed class BankBagSlotPricesRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint Cost;
|
||||
}
|
||||
|
||||
public sealed class BannedAddOnsRecord
|
||||
{
|
||||
public uint Id;
|
||||
public string Name;
|
||||
public string Version;
|
||||
public byte[] Flags = new byte[4];
|
||||
}
|
||||
|
||||
public sealed class BarberShopStyleRecord
|
||||
{
|
||||
public LocalizedString DisplayName;
|
||||
public LocalizedString Description;
|
||||
public float CostModifier;
|
||||
public byte Type;
|
||||
public byte Race;
|
||||
public byte Sex;
|
||||
public byte Data;
|
||||
public uint Id;
|
||||
}
|
||||
|
||||
public sealed class BattlePetBreedQualityRecord
|
||||
{
|
||||
public uint Id;
|
||||
public float Modifier;
|
||||
public byte Quality;
|
||||
}
|
||||
|
||||
public sealed class BattlePetBreedStateRecord
|
||||
{
|
||||
public uint Id;
|
||||
public short Value;
|
||||
public byte BreedID;
|
||||
public byte State;
|
||||
}
|
||||
|
||||
public sealed class BattlePetSpeciesRecord
|
||||
{
|
||||
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 sealed class BattlePetSpeciesStateRecord
|
||||
{
|
||||
public uint Id;
|
||||
public int Value;
|
||||
public ushort SpeciesID;
|
||||
public byte State;
|
||||
}
|
||||
|
||||
public sealed class BattlemasterListRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
public uint IconFileDataID;
|
||||
public LocalizedString GameType;
|
||||
public LocalizedString ShortDescription;
|
||||
public LocalizedString LongDescription;
|
||||
public short[] MapId = new short[16];
|
||||
public ushort HolidayWorldState;
|
||||
public ushort PlayerConditionId;
|
||||
public byte InstanceType;
|
||||
public byte GroupsAllowed;
|
||||
public byte MaxGroupSize;
|
||||
public byte MinLevel;
|
||||
public byte MaxLevel;
|
||||
public byte RatedPlayers;
|
||||
public byte MinPlayers;
|
||||
public byte MaxPlayers;
|
||||
public byte Flags;
|
||||
}
|
||||
|
||||
public sealed class BroadcastTextRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString MaleText;
|
||||
public LocalizedString FemaleText;
|
||||
public ushort[] EmoteID = new ushort[3];
|
||||
public ushort[] EmoteDelay = new ushort[3];
|
||||
public ushort UnkEmoteID;
|
||||
public byte Language;
|
||||
public byte Type;
|
||||
public uint[] SoundID = new uint[2];
|
||||
public uint PlayerConditionID;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,357 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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.Constants;
|
||||
using Framework.GameMath;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public sealed class CharacterFacialHairStylesRecord
|
||||
{
|
||||
public uint ID;
|
||||
public uint[] Geoset = new uint[5];
|
||||
public byte RaceID;
|
||||
public byte SexID;
|
||||
public byte VariationID;
|
||||
}
|
||||
|
||||
public sealed class CharBaseSectionRecord
|
||||
{
|
||||
public uint ID;
|
||||
public CharBaseSectionVariation Variation;
|
||||
public byte ResolutionVariation;
|
||||
public byte Resolution;
|
||||
}
|
||||
|
||||
public sealed class CharSectionsRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint[] TextureFileDataID = new uint[3];
|
||||
public ushort Flags;
|
||||
public byte RaceID;
|
||||
public byte SexID;
|
||||
public byte BaseSection;
|
||||
public byte VariationIndex;
|
||||
public byte ColorIndex;
|
||||
}
|
||||
|
||||
public sealed class CharStartOutfitRecord
|
||||
{
|
||||
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 sealed class CharTitlesRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString NameMale;
|
||||
public LocalizedString NameFemale;
|
||||
public ushort MaskID;
|
||||
public byte Flags;
|
||||
}
|
||||
|
||||
public sealed class ChatChannelsRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ChannelDBCFlags Flags;
|
||||
public LocalizedString Name;
|
||||
public LocalizedString Shortcut;
|
||||
public byte FactionGroup;
|
||||
}
|
||||
|
||||
public sealed class ChrClassesRecord
|
||||
{
|
||||
public string PetNameToken;
|
||||
public LocalizedString Name;
|
||||
public LocalizedString NameFemale;
|
||||
public LocalizedString NameMale;
|
||||
public uint FileName;
|
||||
public uint CreateScreenFileDataID;
|
||||
public uint SelectScreenFileDataID;
|
||||
public uint IconFileDataID;
|
||||
public uint LowResScreenFileDataID;
|
||||
public ushort Flags;
|
||||
public ushort CinematicSequenceID;
|
||||
public ushort DefaultSpec;
|
||||
public PowerType PowerType;
|
||||
public byte SpellClassSet;
|
||||
public byte AttackPowerPerStrength;
|
||||
public byte AttackPowerPerAgility;
|
||||
public byte RangedAttackPowerPerAgility;
|
||||
public byte Unk1;
|
||||
public uint Id;
|
||||
}
|
||||
|
||||
public sealed class ChrClassesXPowerTypesRecord
|
||||
{
|
||||
public uint Id;
|
||||
public byte ClassID;
|
||||
public byte PowerType;
|
||||
}
|
||||
|
||||
public sealed class ChrRacesRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint Flags;
|
||||
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 uint CreateScreenFileDataID;
|
||||
public uint SelectScreenFileDataID;
|
||||
public uint[] MaleCustomizeOffset = new uint[3];
|
||||
public uint[] FemaleCustomizeOffset = new uint[3];
|
||||
public uint LowResScreenFileDataID;
|
||||
public ushort FactionID;
|
||||
public ushort MaleDisplayID;
|
||||
public ushort FemaleDisplayID;
|
||||
public ushort ResSicknessSpellID;
|
||||
public ushort SplashSoundID;
|
||||
public ushort CinematicSequenceID;
|
||||
public byte BaseLanguage;
|
||||
public byte CreatureType;
|
||||
public byte TeamID;
|
||||
public byte RaceRelated;
|
||||
public byte UnalteredVisualRaceID;
|
||||
public byte CharComponentTextureLayoutID;
|
||||
public byte DefaultClassID;
|
||||
public byte NeutralRaceID;
|
||||
public byte ItemAppearanceFrameRaceID;
|
||||
public byte CharComponentTexLayoutHiResID;
|
||||
public uint HighResMaleDisplayID;
|
||||
public uint HighResFemaleDisplayID;
|
||||
public uint[] Unk = new uint[3];
|
||||
}
|
||||
|
||||
public sealed class ChrSpecializationRecord
|
||||
{
|
||||
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;
|
||||
public byte Role;
|
||||
public byte PrimaryStatOrder;
|
||||
public uint Id;
|
||||
public uint IconFileDataID;
|
||||
public ChrSpecializationFlag Flags;
|
||||
public uint AnimReplacementSetID;
|
||||
|
||||
public bool IsPetSpecialization()
|
||||
{
|
||||
return ClassID == 0;
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class CinematicCameraRecord
|
||||
{
|
||||
public uint ID;
|
||||
public uint SoundID;
|
||||
public Vector3 Origin;
|
||||
public float OriginFacing;
|
||||
public uint ModelFileDataID;
|
||||
}
|
||||
|
||||
public sealed class CinematicSequencesRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint SoundID;
|
||||
public ushort[] Camera = new ushort[8];
|
||||
}
|
||||
|
||||
public sealed class ConversationLineRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint BroadcastTextID;
|
||||
public uint SpellVisualKitID;
|
||||
public uint Duration;
|
||||
public ushort NextLineID;
|
||||
public ushort Unk1;
|
||||
public byte Yell;
|
||||
public byte Unk2;
|
||||
public byte Unk3;
|
||||
}
|
||||
|
||||
public sealed class CreatureDisplayInfoRecord
|
||||
{
|
||||
public uint Id;
|
||||
public float CreatureModelScale;
|
||||
public ushort ModelID;
|
||||
public ushort NPCSoundID;
|
||||
public byte SizeClass;
|
||||
public byte Flags;
|
||||
public sbyte Gender;
|
||||
public uint ExtendedDisplayInfoID;
|
||||
public uint[] TextureVariation = new uint[3];
|
||||
public uint PortraitTextureFileDataID;
|
||||
public byte CreatureModelAlpha;
|
||||
public ushort SoundID;
|
||||
public float PlayerModelScale;
|
||||
public uint PortraitCreatureDisplayInfoID;
|
||||
public byte BloodID;
|
||||
public ushort ParticleColorID;
|
||||
public uint CreatureGeosetData;
|
||||
public ushort ObjectEffectPackageID;
|
||||
public ushort AnimReplacementSetID;
|
||||
public sbyte UnarmedWeaponSubclass;
|
||||
public uint StateSpellVisualKitID;
|
||||
public float InstanceOtherPlayerPetScale; // scale of not own player pets inside dungeons/raids/scenarios
|
||||
public uint MountSpellVisualKitID;
|
||||
}
|
||||
|
||||
public sealed class CreatureDisplayInfoExtraRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint FileDataID;
|
||||
public uint HDFileDataID;
|
||||
public byte DisplayRaceID;
|
||||
public byte DisplaySexID;
|
||||
public byte DisplayClassID;
|
||||
public byte SkinID;
|
||||
public byte FaceID;
|
||||
public byte HairStyleID;
|
||||
public byte HairColorID;
|
||||
public byte FacialHairID;
|
||||
public byte[] CustomDisplayOption = new byte[3];
|
||||
public byte Flags;
|
||||
}
|
||||
|
||||
public sealed class CreatureFamilyRecord
|
||||
{
|
||||
public uint Id;
|
||||
public float MinScale;
|
||||
public float MaxScale;
|
||||
public LocalizedString Name;
|
||||
public uint IconFileDataID;
|
||||
public ushort[] SkillLine = new ushort[2];
|
||||
public ushort PetFoodMask;
|
||||
public byte MinScaleLevel;
|
||||
public byte MaxScaleLevel;
|
||||
public byte PetTalentType;
|
||||
}
|
||||
|
||||
public sealed class CreatureModelDataRecord
|
||||
{
|
||||
public uint Id;
|
||||
public float ModelScale;
|
||||
public float FootprintTextureLength;
|
||||
public float FootprintTextureWidth;
|
||||
public float FootprintParticleScale;
|
||||
public float CollisionWidth;
|
||||
public float CollisionHeight;
|
||||
public float MountHeight;
|
||||
public float[] GeoBoxMin = new float[3];
|
||||
public float[] GeoBoxMax = new float[3];
|
||||
public float WorldEffectScale;
|
||||
public float AttachedEffectScale;
|
||||
public float MissileCollisionRadius;
|
||||
public float MissileCollisionPush;
|
||||
public float MissileCollisionRaise;
|
||||
public float OverrideLootEffectScale;
|
||||
public float OverrideNameScale;
|
||||
public float OverrideSelectionRadius;
|
||||
public float TamedPetBaseScale;
|
||||
public float HoverHeight;
|
||||
public uint Flags;
|
||||
public uint FileDataID;
|
||||
public uint SizeClass;
|
||||
public uint BloodID;
|
||||
public uint FootprintTextureID;
|
||||
public uint FoleyMaterialID;
|
||||
public uint FootstepEffectID;
|
||||
public uint DeathThudEffectID;
|
||||
public uint SoundID;
|
||||
public uint CreatureGeosetDataID;
|
||||
}
|
||||
|
||||
public sealed class CreatureTypeRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
public byte Flags;
|
||||
}
|
||||
|
||||
public sealed class CriteriaRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint Asset;
|
||||
public uint StartAsset;
|
||||
public uint FailAsset;
|
||||
public ushort StartTimer;
|
||||
public ushort ModifierTreeId;
|
||||
public ushort EligibilityWorldStateID;
|
||||
public CriteriaTypes Type;
|
||||
public CriteriaTimedTypes StartEvent;
|
||||
public byte FailEvent;
|
||||
public byte Flags;
|
||||
public byte EligibilityWorldStateValue;
|
||||
}
|
||||
|
||||
public sealed class CriteriaTreeRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint Amount;
|
||||
public LocalizedString Description;
|
||||
public ushort Parent;
|
||||
public CriteriaTreeFlags Flags;
|
||||
public byte Operator;
|
||||
public uint CriteriaID;
|
||||
public int OrderIndex;
|
||||
}
|
||||
|
||||
public sealed class CurrencyTypesRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
public uint MaxQty;
|
||||
public uint MaxEarnablePerWeek;
|
||||
public CurrencyFlags Flags;
|
||||
public LocalizedString Description;
|
||||
public byte CategoryID;
|
||||
public byte SpellCategory;
|
||||
public byte Quality;
|
||||
public uint InventoryIconFileDataID;
|
||||
public uint SpellWeight;
|
||||
}
|
||||
|
||||
public sealed class CurveRecord
|
||||
{
|
||||
public uint ID;
|
||||
public byte Type;
|
||||
public byte Unused;
|
||||
}
|
||||
|
||||
public sealed class CurvePointRecord
|
||||
{
|
||||
public uint Id;
|
||||
public float X;
|
||||
public float Y;
|
||||
public ushort CurveID;
|
||||
public byte Index;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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.Constants;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public sealed class DestructibleModelDataRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ushort StateDamagedDisplayID;
|
||||
public ushort StateDestroyedDisplayID;
|
||||
public ushort StateRebuildingDisplayID;
|
||||
public ushort StateSmokeDisplayID;
|
||||
public ushort HealEffectSpeed;
|
||||
public byte StateDamagedImpactEffectDoodadSet;
|
||||
public byte StateDamagedAmbientDoodadSet;
|
||||
public byte StateDamagedNameSet;
|
||||
public byte StateDestroyedDestructionDoodadSet;
|
||||
public byte StateDestroyedImpactEffectDoodadSet;
|
||||
public byte StateDestroyedAmbientDoodadSet;
|
||||
public byte StateDestroyedNameSet;
|
||||
public byte StateRebuildingDestructionDoodadSet;
|
||||
public byte StateRebuildingImpactEffectDoodadSet;
|
||||
public byte StateRebuildingAmbientDoodadSet;
|
||||
public byte StateRebuildingNameSet;
|
||||
public byte StateSmokeInitDoodadSet;
|
||||
public byte StateSmokeAmbientDoodadSet;
|
||||
public byte StateSmokeNameSet;
|
||||
public byte EjectDirection;
|
||||
public byte DoNotHighlight;
|
||||
public byte HealEffect;
|
||||
}
|
||||
|
||||
public sealed class DifficultyRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
public ushort GroupSizeHealthCurveID;
|
||||
public ushort GroupSizeDmgCurveID;
|
||||
public ushort GroupSizeSpellPointsCurveID;
|
||||
public byte FallbackDifficultyID;
|
||||
public MapTypes InstanceType;
|
||||
public byte MinPlayers;
|
||||
public byte MaxPlayers;
|
||||
public sbyte OldEnumValue;
|
||||
public DifficultyFlags Flags;
|
||||
public byte ToggleDifficultyID;
|
||||
public byte ItemBonusTreeModID;
|
||||
public byte OrderIndex;
|
||||
}
|
||||
|
||||
public sealed class DungeonEncounterRecord
|
||||
{
|
||||
public LocalizedString Name;
|
||||
public uint CreatureDisplayID;
|
||||
public ushort MapID;
|
||||
public byte DifficultyID;
|
||||
public byte Bit;
|
||||
public byte Flags;
|
||||
public uint Id;
|
||||
public uint OrderIndex;
|
||||
public uint TextureFileDataID;
|
||||
}
|
||||
|
||||
public sealed class DurabilityCostsRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ushort[] WeaponSubClassCost = new ushort[21];
|
||||
public ushort[] ArmorSubClassCost = new ushort[8];
|
||||
}
|
||||
|
||||
public sealed class DurabilityQualityRecord
|
||||
{
|
||||
public uint Id;
|
||||
public float QualityMod;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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 sealed class EmotesRecord
|
||||
{
|
||||
public uint Id;
|
||||
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 sealed class EmotesTextRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
public ushort EmoteID;
|
||||
}
|
||||
|
||||
public sealed class EmotesTextSoundRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ushort EmotesTextId;
|
||||
public byte RaceId;
|
||||
public byte SexId;
|
||||
public byte ClassId;
|
||||
public uint SoundId;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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.Constants;
|
||||
using System;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public sealed class FactionRecord
|
||||
{
|
||||
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];
|
||||
public ushort[] ReputationFlags = new ushort[4];
|
||||
public ushort ParentFactionID;
|
||||
public ushort ParagonFactionID;
|
||||
public byte ParentFactionCapIn; // The highest rank the faction will profit from incoming spillover
|
||||
public byte ParentFactionCapOut;
|
||||
public byte Expansion;
|
||||
public byte Flags;
|
||||
public byte FriendshipRepID;
|
||||
|
||||
public bool CanHaveReputation()
|
||||
{
|
||||
return ReputationIndex >= 0;
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class FactionTemplateRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ushort Faction;
|
||||
public ushort Flags;
|
||||
public ushort[] Enemies = new ushort[4];
|
||||
public ushort[] Friends = new ushort[4];
|
||||
public byte Mask;
|
||||
public byte FriendMask;
|
||||
public byte EnemyMask;
|
||||
|
||||
public bool IsFriendlyTo(FactionTemplateRecord entry)
|
||||
{
|
||||
if (Id == entry.Id)
|
||||
return true;
|
||||
if (entry.Faction != 0)
|
||||
{
|
||||
for (int i = 0; i < 4; ++i)
|
||||
if (Enemies[i] == entry.Faction)
|
||||
return false;
|
||||
for (int i = 0; i < 4; ++i)
|
||||
if (Friends[i] == entry.Faction)
|
||||
return true;
|
||||
}
|
||||
return Convert.ToBoolean(FriendMask & entry.Mask) || Convert.ToBoolean(Mask & entry.FriendMask);
|
||||
}
|
||||
public bool IsHostileTo(FactionTemplateRecord entry)
|
||||
{
|
||||
if (Id == entry.Id)
|
||||
return false;
|
||||
if (entry.Faction != 0)
|
||||
{
|
||||
for (int i = 0; i < 4; ++i)
|
||||
if (Enemies[i] == entry.Faction)
|
||||
return true;
|
||||
for (int i = 0; i < 4; ++i)
|
||||
if (Friends[i] == entry.Faction)
|
||||
return false;
|
||||
}
|
||||
return (EnemyMask & entry.Mask) != 0;
|
||||
}
|
||||
public bool IsHostileToPlayers() { return (EnemyMask & (uint)FactionMasks.Player) != 0; }
|
||||
public bool IsNeutralToAll()
|
||||
{
|
||||
for (int i = 0; i < 4; ++i)
|
||||
if (Enemies[i] != 0)
|
||||
return false;
|
||||
|
||||
return EnemyMask == 0 && FriendMask == 0;
|
||||
}
|
||||
public bool IsContestedGuardFaction() { return Flags.HasAnyFlag((ushort)FactionTemplateFlags.ContestedGuard); }
|
||||
public bool ShouldSparAttack() { return Flags.HasAnyFlag((ushort)FactionTemplateFlags.EnemySpar); }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,270 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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.Constants;
|
||||
using Framework.GameMath;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public sealed class GameObjectsRecord
|
||||
{
|
||||
public Vector3 Position;
|
||||
public float RotationX;
|
||||
public float RotationY;
|
||||
public float RotationZ;
|
||||
public float RotationW;
|
||||
public float Size;
|
||||
public int[] Data = new int[8];
|
||||
public LocalizedString Name;
|
||||
public ushort MapID;
|
||||
public ushort DisplayID;
|
||||
public ushort PhaseID;
|
||||
public ushort PhaseGroupID;
|
||||
public byte PhaseUseFlags;
|
||||
public GameObjectTypes Type;
|
||||
public uint Id;
|
||||
}
|
||||
|
||||
public sealed class GameObjectDisplayInfoRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint FileDataID;
|
||||
public Vector3 GeoBoxMin;
|
||||
public Vector3 GeoBoxMax;
|
||||
public float OverrideLootEffectScale;
|
||||
public float OverrideNameScale;
|
||||
public ushort ObjectEffectPackageID;
|
||||
}
|
||||
|
||||
public sealed class GarrAbilityRecord
|
||||
{
|
||||
public LocalizedString Name;
|
||||
public LocalizedString Description;
|
||||
public uint IconFileDataID;
|
||||
public GarrisonAbilityFlags Flags;
|
||||
public ushort OtherFactionGarrAbilityID;
|
||||
public byte GarrAbilityCategoryID;
|
||||
public byte FollowerTypeID;
|
||||
public uint Id;
|
||||
}
|
||||
|
||||
public sealed class GarrBuildingRecord
|
||||
{
|
||||
public uint Id;
|
||||
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;
|
||||
public ushort AllianceTexPrefixKitID;
|
||||
public ushort AllianceActivationScenePackageID;
|
||||
public ushort HordeActivationScenePackageID;
|
||||
public ushort FollowerRequiredGarrAbilityID;
|
||||
public ushort FollowerGarrAbilityEffectID;
|
||||
public short CostMoney;
|
||||
public byte Unknown;
|
||||
public byte Type;
|
||||
public byte Level;
|
||||
public GarrisonBuildingFlags Flags;
|
||||
public byte MaxShipments;
|
||||
public byte GarrTypeID;
|
||||
public int BuildDuration;
|
||||
public int CostCurrencyAmount;
|
||||
public int BonusAmount;
|
||||
}
|
||||
|
||||
public sealed class GarrBuildingPlotInstRecord
|
||||
{
|
||||
public Vector2 LandmarkOffset;
|
||||
public ushort UiTextureAtlasMemberID;
|
||||
public ushort GarrSiteLevelPlotInstID;
|
||||
public byte GarrBuildingID;
|
||||
public uint Id;
|
||||
}
|
||||
|
||||
public sealed class GarrClassSpecRecord
|
||||
{
|
||||
public LocalizedString NameMale;
|
||||
public LocalizedString NameFemale;
|
||||
public LocalizedString NameGenderless;
|
||||
public ushort ClassAtlasID; // UiTextureAtlasMember.db2 ref
|
||||
public ushort GarrFollItemSetID;
|
||||
public byte Limit;
|
||||
public byte Flags;
|
||||
public uint Id;
|
||||
}
|
||||
|
||||
public sealed class GarrFollowerRecord
|
||||
{
|
||||
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;
|
||||
public ushort ItemLevelArmor;
|
||||
public ushort HordeListPortraitTextureKitID;
|
||||
public ushort AllianceListPortraitTextureKitID;
|
||||
public byte FollowerTypeID;
|
||||
public byte HordeUiAnimRaceInfoID;
|
||||
public byte AllianceUiAnimRaceInfoID;
|
||||
public byte Quality;
|
||||
public byte HordeGarrClassSpecID;
|
||||
public byte AllianceGarrClassSpecID;
|
||||
public byte Level;
|
||||
public byte Unknown1;
|
||||
public byte Flags;
|
||||
public sbyte Unknown2;
|
||||
public sbyte Unknown3;
|
||||
public byte GarrTypeID;
|
||||
public byte MaxDurability;
|
||||
public byte Class;
|
||||
public byte HordeFlavorTextGarrStringID;
|
||||
public byte AllianceFlavorTextGarrStringID;
|
||||
public uint Id;
|
||||
}
|
||||
|
||||
public sealed class GarrFollowerXAbilityRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ushort GarrFollowerID;
|
||||
public ushort GarrAbilityID;
|
||||
public byte FactionIndex;
|
||||
}
|
||||
|
||||
public sealed class GarrPlotRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
public uint AllianceConstructionGameObjectID;
|
||||
public uint HordeConstructionGameObjectID;
|
||||
public byte GarrPlotUICategoryID;
|
||||
public byte PlotType;
|
||||
public byte Flags;
|
||||
public uint MinCount;
|
||||
public uint MaxCount;
|
||||
}
|
||||
|
||||
public sealed class GarrPlotBuildingRecord
|
||||
{
|
||||
public uint Id;
|
||||
public byte GarrPlotID;
|
||||
public byte GarrBuildingID;
|
||||
}
|
||||
|
||||
public sealed class GarrPlotInstanceRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
public byte GarrPlotID;
|
||||
}
|
||||
|
||||
public sealed class GarrSiteLevelRecord
|
||||
{
|
||||
public uint Id;
|
||||
public Vector2 TownHall;
|
||||
public ushort MapID;
|
||||
public ushort SiteID;
|
||||
public ushort MovieID;
|
||||
public ushort UpgradeResourceCost;
|
||||
public ushort UpgradeMoneyCost;
|
||||
public byte Level;
|
||||
public byte UITextureKitID;
|
||||
public byte Level2;
|
||||
}
|
||||
|
||||
public sealed class GarrSiteLevelPlotInstRecord
|
||||
{
|
||||
public uint Id;
|
||||
public Vector2 Landmark;
|
||||
public ushort GarrSiteLevelID;
|
||||
public byte GarrPlotInstanceID;
|
||||
public byte Unknown;
|
||||
}
|
||||
|
||||
public sealed class GemPropertiesRecord
|
||||
{
|
||||
public uint Id;
|
||||
public SocketColor Type;
|
||||
public ushort EnchantID;
|
||||
public ushort MinItemLevel;
|
||||
}
|
||||
|
||||
public sealed class GlyphBindableSpellRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public ushort GlyphPropertiesID;
|
||||
}
|
||||
|
||||
public sealed class GlyphPropertiesRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public ushort SpellIconID;
|
||||
public byte Type;
|
||||
public byte GlyphExclusiveCategoryID;
|
||||
}
|
||||
|
||||
public sealed class GlyphRequiredSpecRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ushort GlyphPropertiesID;
|
||||
public ushort ChrSpecializationID;
|
||||
}
|
||||
|
||||
public sealed class GuildColorBackgroundRecord
|
||||
{
|
||||
public uint Id;
|
||||
|
||||
public byte Red;
|
||||
public byte Green;
|
||||
public byte Blue;
|
||||
}
|
||||
|
||||
public sealed class GuildColorBorderRecord
|
||||
{
|
||||
public uint Id;
|
||||
public byte Red;
|
||||
public byte Green;
|
||||
public byte Blue;
|
||||
}
|
||||
|
||||
public sealed class GuildColorEmblemRecord
|
||||
{
|
||||
public uint Id;
|
||||
public byte Red;
|
||||
public byte Green;
|
||||
public byte Blue;
|
||||
}
|
||||
|
||||
public sealed class GuildPerkSpellsRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,183 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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 sealed class GtArmorMitigationByLvlRecord
|
||||
{
|
||||
public float Mitigation;
|
||||
}
|
||||
|
||||
public sealed class GtArtifactKnowledgeMultiplierRecord
|
||||
{
|
||||
public float Multiplier;
|
||||
}
|
||||
|
||||
public sealed class GtArtifactLevelXPRecord
|
||||
{
|
||||
public float XP;
|
||||
public float XP2;
|
||||
}
|
||||
|
||||
public sealed class GtBarberShopCostBaseRecord
|
||||
{
|
||||
public float Cost;
|
||||
}
|
||||
|
||||
public sealed class GtBaseMPRecord
|
||||
{
|
||||
public float Rogue;
|
||||
public float Druid;
|
||||
public float Hunter;
|
||||
public float Mage;
|
||||
public float Paladin;
|
||||
public float Priest;
|
||||
public float Shaman;
|
||||
public float Warlock;
|
||||
public float Warrior;
|
||||
public float DeathKnight;
|
||||
public float Monk;
|
||||
public float DemonHunter;
|
||||
}
|
||||
|
||||
public sealed class GtCombatRatingsRecord
|
||||
{
|
||||
public float Amplify;
|
||||
public float DefenseSkill;
|
||||
public float Dodge;
|
||||
public float Parry;
|
||||
public float Block;
|
||||
public float HitMelee;
|
||||
public float HitRanged;
|
||||
public float HitSpell;
|
||||
public float CritMelee;
|
||||
public float CritRanged;
|
||||
public float CritSpell;
|
||||
public float MultiStrike;
|
||||
public float Readiness;
|
||||
public float Speed;
|
||||
public float ResilienceCritTaken;
|
||||
public float ResiliencePlayerDamage;
|
||||
public float Lifesteal;
|
||||
public float HasteMelee;
|
||||
public float HasteRanged;
|
||||
public float HasteSpell;
|
||||
public float Avoidance;
|
||||
public float Sturdiness;
|
||||
public float Unused7;
|
||||
public float Expertise;
|
||||
public float ArmorPenetration;
|
||||
public float Mastery;
|
||||
public float PvPPower;
|
||||
public float Cleave;
|
||||
public float VersatilityDamageDone;
|
||||
public float VersatilityHealingDone;
|
||||
public float VersatilityDamageTaken;
|
||||
public float Unused12;
|
||||
}
|
||||
|
||||
public sealed class GtCombatRatingsMultByILvlRecord
|
||||
{
|
||||
public float ArmorMultiplier;
|
||||
public float WeaponMultiplier;
|
||||
public float TrinketMultiplier;
|
||||
public float JewelryMultiplier;
|
||||
}
|
||||
|
||||
public sealed class GtHonorLevelRecord
|
||||
{
|
||||
public float[] Prestige = new float[33];
|
||||
}
|
||||
|
||||
public sealed class GtHpPerStaRecord
|
||||
{
|
||||
public float Health;
|
||||
}
|
||||
|
||||
public sealed class GtItemSocketCostPerLevelRecord
|
||||
{
|
||||
public float SocketCost;
|
||||
}
|
||||
|
||||
public sealed class GtNpcDamageByClassRecord
|
||||
{
|
||||
public float Rogue;
|
||||
public float Druid;
|
||||
public float Hunter;
|
||||
public float Mage;
|
||||
public float Paladin;
|
||||
public float Priest;
|
||||
public float Shaman;
|
||||
public float Warlock;
|
||||
public float Warrior;
|
||||
public float DeathKnight;
|
||||
public float Monk;
|
||||
public float DemonHunter;
|
||||
}
|
||||
|
||||
public sealed class GtNpcManaCostScalerRecord
|
||||
{
|
||||
public float Scaler;
|
||||
}
|
||||
|
||||
public sealed class GtNpcTotalHpRecord
|
||||
{
|
||||
public float Rogue;
|
||||
public float Druid;
|
||||
public float Hunter;
|
||||
public float Mage;
|
||||
public float Paladin;
|
||||
public float Priest;
|
||||
public float Shaman;
|
||||
public float Warlock;
|
||||
public float Warrior;
|
||||
public float DeathKnight;
|
||||
public float Monk;
|
||||
public float DemonHunter;
|
||||
}
|
||||
|
||||
public sealed class GtSpellScalingRecord
|
||||
{
|
||||
public float Rogue;
|
||||
public float Druid;
|
||||
public float Hunter;
|
||||
public float Mage;
|
||||
public float Paladin;
|
||||
public float Priest;
|
||||
public float Shaman;
|
||||
public float Warlock;
|
||||
public float Warrior;
|
||||
public float DeathKnight;
|
||||
public float Monk;
|
||||
public float DemonHunter;
|
||||
public float Item;
|
||||
public float Consumable;
|
||||
public float Gem1;
|
||||
public float Gem2;
|
||||
public float Gem3;
|
||||
public float Health;
|
||||
}
|
||||
|
||||
public sealed class GtXpRecord
|
||||
{
|
||||
public float Total;
|
||||
public float PerKill;
|
||||
public float Junk;
|
||||
public float Stats;
|
||||
public float Divisor;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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.Constants;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public sealed class HeirloomRecord
|
||||
{
|
||||
public uint ItemID;
|
||||
public LocalizedString SourceText;
|
||||
public uint[] OldItem = new uint[2];
|
||||
public uint NextDifficultyItemID;
|
||||
public uint[] UpgradeItemID = new uint[3];
|
||||
public ushort[] ItemBonusListID = new ushort[3];
|
||||
public byte Flags;
|
||||
public byte Source;
|
||||
public uint Id;
|
||||
}
|
||||
|
||||
public sealed class HolidaysRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint[] Date = new uint[SharedConst.MaxHolidayDates]; // dates in unix time starting at January, 1, 2000
|
||||
public ushort[] Duration = new ushort[SharedConst.MaxHolidayDurations];
|
||||
public ushort Region;
|
||||
public byte Looping;
|
||||
public byte[] CalendarFlags = new byte[SharedConst.MaxHolidayFlags];
|
||||
public byte Priority;
|
||||
public sbyte CalendarFilterType;
|
||||
public byte Flags;
|
||||
public uint HolidayNameID;
|
||||
public uint HolidayDescriptionID;
|
||||
public int[] TextureFileDataID = new int[3];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,389 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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.Constants;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public sealed class ImportPriceArmorRecord
|
||||
{
|
||||
public uint Id;
|
||||
public float ClothFactor;
|
||||
public float LeatherFactor;
|
||||
public float MailFactor;
|
||||
public float PlateFactor;
|
||||
}
|
||||
|
||||
public sealed class ImportPriceQualityRecord
|
||||
{
|
||||
public uint Id;
|
||||
public float Factor;
|
||||
}
|
||||
|
||||
public sealed class ImportPriceShieldRecord
|
||||
{
|
||||
public uint Id;
|
||||
public float Factor;
|
||||
}
|
||||
|
||||
public sealed class ImportPriceWeaponRecord
|
||||
{
|
||||
public uint Id;
|
||||
public float Factor;
|
||||
}
|
||||
|
||||
public sealed class ItemRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint FileDataID;
|
||||
public ItemClass Class;
|
||||
public byte SubClass;
|
||||
public sbyte SoundOverrideSubclass;
|
||||
public sbyte Material;
|
||||
public InventoryType inventoryType;
|
||||
public byte Sheath;
|
||||
public byte GroupSoundsID;
|
||||
}
|
||||
|
||||
public sealed class ItemAppearanceRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint DisplayID;
|
||||
public uint IconFileDataID;
|
||||
public uint UIOrder;
|
||||
public byte ObjectComponentSlot;
|
||||
}
|
||||
|
||||
public sealed class ItemArmorQualityRecord
|
||||
{
|
||||
public uint Id;
|
||||
public float[] QualityMod = new float[7];
|
||||
public ushort ItemLevel;
|
||||
}
|
||||
|
||||
public sealed class ItemArmorShieldRecord
|
||||
{
|
||||
public uint Id;
|
||||
public float[] Quality = new float[7];
|
||||
public ushort ItemLevel;
|
||||
}
|
||||
|
||||
public sealed class ItemArmorTotalRecord
|
||||
{
|
||||
public uint Id;
|
||||
public float[] Value = new float[4];
|
||||
public ushort ItemLevel;
|
||||
}
|
||||
|
||||
public sealed class ItemBagFamilyRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint Name;
|
||||
}
|
||||
|
||||
public sealed class ItemBonusRecord
|
||||
{
|
||||
public uint Id;
|
||||
public int[] Value = new int[2];
|
||||
public ushort BonusListID;
|
||||
public ItemBonusType Type;
|
||||
public byte Index;
|
||||
}
|
||||
|
||||
public sealed class ItemBonusListLevelDeltaRecord
|
||||
{
|
||||
public short Delta;
|
||||
public uint Id;
|
||||
}
|
||||
|
||||
public sealed class ItemBonusTreeNodeRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ushort BonusTreeID;
|
||||
public ushort SubTreeID;
|
||||
public ushort BonusListID;
|
||||
public ushort ItemLevelSelectorID;
|
||||
public byte BonusTreeModID;
|
||||
}
|
||||
|
||||
public sealed class ItemChildEquipmentRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint ItemID;
|
||||
public uint AltItemID;
|
||||
public byte AltEquipmentSlot;
|
||||
}
|
||||
|
||||
public sealed class ItemClassRecord
|
||||
{
|
||||
public uint Id;
|
||||
public float PriceMod;
|
||||
public LocalizedString Name;
|
||||
public byte OldEnumValue;
|
||||
public byte Flags;
|
||||
}
|
||||
|
||||
public sealed class ItemCurrencyCostRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint ItemId;
|
||||
}
|
||||
|
||||
// common struct for:
|
||||
// ItemDamageAmmo.dbc
|
||||
// ItemDamageOneHand.dbc
|
||||
// ItemDamageOneHandCaster.dbc
|
||||
// ItemDamageRanged.dbc
|
||||
// ItemDamageThrown.dbc
|
||||
// ItemDamageTwoHand.dbc
|
||||
// ItemDamageTwoHandCaster.dbc
|
||||
// ItemDamageWand.dbc
|
||||
public sealed class ItemDamageRecord
|
||||
{
|
||||
public uint Id;
|
||||
public float[] DPS = new float[7];
|
||||
public ushort ItemLevel;
|
||||
}
|
||||
|
||||
public sealed class ItemDisenchantLootRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ushort MinItemLevel;
|
||||
public ushort MaxItemLevel;
|
||||
public ushort RequiredDisenchantSkill;
|
||||
public byte ItemClass;
|
||||
public sbyte ItemSubClass;
|
||||
public byte ItemQuality;
|
||||
}
|
||||
|
||||
public sealed class ItemEffectRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint ItemID;
|
||||
public uint SpellID;
|
||||
public int Cooldown;
|
||||
public int CategoryCooldown;
|
||||
public short Charges;
|
||||
public ushort Category;
|
||||
public ushort ChrSpecializationID;
|
||||
public byte OrderIndex;
|
||||
public ItemSpelltriggerType Trigger;
|
||||
}
|
||||
|
||||
public sealed class ItemExtendedCostRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint[] RequiredItem = new uint[ItemConst.MaxItemExtCostItems]; // required item id
|
||||
public uint[] RequiredCurrencyCount = new uint[ItemConst.MaxItemExtCostCurrencies]; // required curency count
|
||||
public ushort[] RequiredItemCount = new ushort[ItemConst.MaxItemExtCostItems]; // required count of 1st item
|
||||
public ushort RequiredPersonalArenaRating; // required personal arena rating
|
||||
public ushort[] RequiredCurrency = new ushort[ItemConst.MaxItemExtCostCurrencies]; // required curency id
|
||||
public byte RequiredArenaSlot; // arena slot restrictions (min slot value)
|
||||
public byte RequiredFactionId;
|
||||
public byte RequiredFactionStanding;
|
||||
public byte RequirementFlags;
|
||||
public byte RequiredAchievement;
|
||||
}
|
||||
|
||||
public sealed class ItemLevelSelectorRecord
|
||||
{
|
||||
public uint ID;
|
||||
public ushort ItemLevel;
|
||||
}
|
||||
|
||||
public sealed class ItemLimitCategoryRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
public byte Quantity;
|
||||
public byte Flags;
|
||||
}
|
||||
|
||||
public sealed class ItemModifiedAppearanceRecord
|
||||
{
|
||||
public uint ItemID;
|
||||
public ushort AppearanceID;
|
||||
public byte AppearanceModID;
|
||||
public byte Index;
|
||||
public byte SourceType;
|
||||
public uint Id;
|
||||
}
|
||||
|
||||
public sealed class ItemPriceBaseRecord
|
||||
{
|
||||
public uint Id;
|
||||
public float ArmorFactor;
|
||||
public float WeaponFactor;
|
||||
public ushort ItemLevel;
|
||||
}
|
||||
|
||||
public sealed class ItemRandomPropertiesRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
public ushort[] Enchantment = new ushort[ItemConst.MaxItemRandomProperties];
|
||||
}
|
||||
|
||||
public sealed class ItemRandomSuffixRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
public ushort[] Enchantment = new ushort[ItemConst.MaxItemRandomProperties];
|
||||
public ushort[] AllocationPct = new ushort[ItemConst.MaxItemRandomProperties];
|
||||
}
|
||||
|
||||
public sealed class ItemSearchNameRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
public uint[] Flags = new uint[3];
|
||||
public uint AllowableRace;
|
||||
public uint RequiredSpell;
|
||||
public ushort RequiredReputationFaction;
|
||||
public ushort RequiredSkill;
|
||||
public ushort RequiredSkillRank;
|
||||
public ushort ItemLevel;
|
||||
public byte Quality;
|
||||
public byte RequiredExpansion;
|
||||
public byte RequiredReputationRank;
|
||||
public byte RequiredLevel;
|
||||
public int AllowableClass;
|
||||
}
|
||||
|
||||
public sealed class ItemSetRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
public uint[] ItemID = new uint[17];
|
||||
public ushort RequiredSkillRank;
|
||||
public uint RequiredSkill;
|
||||
public ItemSetFlags Flags;
|
||||
}
|
||||
|
||||
public sealed class ItemSetSpellRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public ushort ItemSetID;
|
||||
public ushort ChrSpecID;
|
||||
public byte Threshold;
|
||||
}
|
||||
|
||||
public sealed class ItemSparseRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint[] Flags = new uint[3];
|
||||
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 uint Duration;
|
||||
public float StatScalingFactor;
|
||||
public short AllowableClass;
|
||||
public ushort ItemLevel;
|
||||
public ushort RequiredSkill;
|
||||
public ushort RequiredSkillRank;
|
||||
public ushort RequiredReputationFaction;
|
||||
public short[] ItemStatValue = new short[ItemConst.MaxStats];
|
||||
public ushort ScalingStatDistribution;
|
||||
public ushort Delay;
|
||||
public ushort PageText;
|
||||
public ushort StartQuest;
|
||||
public ushort LockID;
|
||||
public ushort RandomProperty;
|
||||
public ushort RandomSuffix;
|
||||
public ushort ItemSet;
|
||||
public ushort Area;
|
||||
public ushort Map;
|
||||
public ushort TotemCategory;
|
||||
public ushort SocketBonus;
|
||||
public ushort GemProperties;
|
||||
public ushort ItemLimitCategory;
|
||||
public ushort HolidayID;
|
||||
public ushort RequiredTransmogHolidayID;
|
||||
public ushort ItemNameDescriptionID;
|
||||
public byte Quality;
|
||||
public InventoryType inventoryType;
|
||||
public sbyte RequiredLevel;
|
||||
public byte RequiredHonorRank;
|
||||
public byte RequiredCityRank;
|
||||
public byte RequiredReputationRank;
|
||||
public byte ContainerSlots;
|
||||
public sbyte[] ItemStatType = new sbyte[ItemConst.MaxStats];
|
||||
public byte DamageType;
|
||||
public byte Bonding;
|
||||
public byte LanguageID;
|
||||
public byte PageMaterial;
|
||||
public sbyte Material;
|
||||
public byte Sheath;
|
||||
public byte[] SocketColor = new byte[ItemConst.MaxGemSockets];
|
||||
public byte CurrencySubstitutionID;
|
||||
public byte CurrencySubstitutionCount;
|
||||
public byte ArtifactID;
|
||||
public byte RequiredExpansion;
|
||||
}
|
||||
|
||||
public sealed class ItemSpecRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ushort SpecID;
|
||||
public byte MinLevel;
|
||||
public byte MaxLevel;
|
||||
public byte ItemType;
|
||||
public ItemSpecStat PrimaryStat;
|
||||
public ItemSpecStat SecondaryStat;
|
||||
}
|
||||
|
||||
public sealed class ItemSpecOverrideRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint ItemID;
|
||||
public ushort SpecID;
|
||||
}
|
||||
|
||||
public sealed class ItemUpgradeRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint CurrencyCost;
|
||||
public ushort PrevItemUpgradeID;
|
||||
public ushort CurrencyID;
|
||||
public byte ItemUpgradePathID;
|
||||
public byte ItemLevelBonus;
|
||||
}
|
||||
|
||||
public sealed class ItemXBonusTreeRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint ItemID;
|
||||
public ushort BonusTreeID;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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 sealed class KeyChainRecord
|
||||
{
|
||||
public uint Id;
|
||||
public byte[] Key = new byte[32];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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.Constants;
|
||||
using Framework.GameMath;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public sealed class LfgDungeonsRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
public LfgFlags Flags;
|
||||
public LocalizedString Description;
|
||||
public float MinItemLevel;
|
||||
public ushort MaxLevel;
|
||||
public ushort TargetLevelMax;
|
||||
public short MapID;
|
||||
public ushort RandomID;
|
||||
public ushort ScenarioID;
|
||||
public ushort LastBossJournalEncounterID;
|
||||
public ushort BonusReputationAmount;
|
||||
public ushort MentorItemLevel;
|
||||
public uint PlayerConditionID;
|
||||
public byte MinLevel;
|
||||
public byte TargetLevel;
|
||||
public byte TargetLevelMin;
|
||||
public Difficulty DifficultyID;
|
||||
public LfgType Type;
|
||||
public byte Faction;
|
||||
public byte Expansion;
|
||||
public byte OrderIndex;
|
||||
public byte GroupID;
|
||||
public byte CountTank;
|
||||
public byte CountHealer;
|
||||
public byte CountDamage;
|
||||
public byte MinCountTank;
|
||||
public byte MinCountHealer;
|
||||
public byte MinCountDamage;
|
||||
public byte SubType;
|
||||
public byte MentorCharLevel;
|
||||
public int TextureFileDataID;
|
||||
public int RewardIconFileDataID;
|
||||
public int ProposalTextureFileDataID;
|
||||
|
||||
// Helpers
|
||||
public uint Entry() { return (uint)(Id + ((int)Type << 24)); }
|
||||
}
|
||||
|
||||
public sealed class LightRecord
|
||||
{
|
||||
public uint Id;
|
||||
public Vector3 Pos;
|
||||
public float FalloffStart;
|
||||
public float FalloffEnd;
|
||||
public ushort MapID;
|
||||
public ushort[] LightParamsID = new ushort[8];
|
||||
}
|
||||
|
||||
public sealed class LiquidTypeRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
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];
|
||||
public ushort Flags;
|
||||
public ushort LightID;
|
||||
public byte LiquidType;
|
||||
public byte ParticleMovement;
|
||||
public byte ParticleTexSlots;
|
||||
public byte MaterialID;
|
||||
public byte[] DepthTexCount = new byte[6];
|
||||
public uint SoundID;
|
||||
}
|
||||
|
||||
public sealed class LockRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint[] Index = new uint[SharedConst.MaxLockCase];
|
||||
public ushort[] Skill = new ushort[SharedConst.MaxLockCase];
|
||||
public byte[] LockType = new byte[SharedConst.MaxLockCase];
|
||||
public byte[] Action = new byte[SharedConst.MaxLockCase];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,240 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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.GameMath;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
struct M2SplineKey
|
||||
{
|
||||
public M2SplineKey(BinaryReader reader)
|
||||
{
|
||||
p0 = new Vector3(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
|
||||
p1 = new Vector3(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
|
||||
p2 = new Vector3(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
|
||||
}
|
||||
|
||||
public Vector3 p0;
|
||||
public Vector3 p1;
|
||||
public Vector3 p2;
|
||||
}
|
||||
|
||||
struct M2Header
|
||||
{
|
||||
public M2Header(BinaryReader reader)
|
||||
{
|
||||
Magic = null;/// reader.ReadStringFromChars(4);
|
||||
Version = reader.ReadUInt32();
|
||||
lName = reader.ReadUInt32();
|
||||
ofsName = reader.ReadUInt32();
|
||||
GlobalModelFlags = reader.ReadUInt32();
|
||||
nGlobalSequences = reader.ReadUInt32();
|
||||
ofsGlobalSequences = reader.ReadUInt32();
|
||||
nAnimations = reader.ReadUInt32();
|
||||
ofsAnimations = reader.ReadUInt32();
|
||||
nAnimationLookup = reader.ReadUInt32();
|
||||
ofsAnimationLookup = reader.ReadUInt32();
|
||||
nBones = reader.ReadUInt32();
|
||||
ofsBones = reader.ReadUInt32();
|
||||
nKeyBoneLookup = reader.ReadUInt32();
|
||||
ofsKeyBoneLookup = reader.ReadUInt32();
|
||||
nVertices = reader.ReadUInt32();
|
||||
ofsVertices = reader.ReadUInt32();
|
||||
nViews = reader.ReadUInt32();
|
||||
nSubmeshAnimations = reader.ReadUInt32();
|
||||
ofsSubmeshAnimations = reader.ReadUInt32();
|
||||
nTextures = reader.ReadUInt32();
|
||||
ofsTextures = reader.ReadUInt32();
|
||||
nTransparency = reader.ReadUInt32();
|
||||
ofsTransparency = reader.ReadUInt32();
|
||||
nUVAnimation = reader.ReadUInt32();
|
||||
ofsUVAnimation = reader.ReadUInt32();
|
||||
nTexReplace = reader.ReadUInt32();
|
||||
ofsTexReplace = reader.ReadUInt32();
|
||||
nRenderFlags = reader.ReadUInt32();
|
||||
ofsRenderFlags = reader.ReadUInt32();
|
||||
nBoneLookupTable = reader.ReadUInt32();
|
||||
ofsBoneLookupTable = reader.ReadUInt32();
|
||||
nTexLookup = reader.ReadUInt32();
|
||||
ofsTexLookup = reader.ReadUInt32();
|
||||
nTexUnits = reader.ReadUInt32();
|
||||
ofsTexUnits = reader.ReadUInt32();
|
||||
nTransLookup = reader.ReadUInt32();
|
||||
ofsTransLookup = reader.ReadUInt32();
|
||||
nUVAnimLookup = reader.ReadUInt32();
|
||||
ofsUVAnimLookup = reader.ReadUInt32();
|
||||
BoundingBox = new AxisAlignedBox(new Vector3(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()) , new Vector3(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()));
|
||||
BoundingSphereRadius = reader.ReadSingle();
|
||||
CollisionBox = new AxisAlignedBox(new Vector3(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()), new Vector3(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()));
|
||||
CollisionSphereRadius = reader.ReadSingle();
|
||||
nBoundingTriangles = reader.ReadUInt32();
|
||||
ofsBoundingTriangles = reader.ReadUInt32();
|
||||
nBoundingVertices = reader.ReadUInt32();
|
||||
ofsBoundingVertices = reader.ReadUInt32();
|
||||
nBoundingNormals = reader.ReadUInt32();
|
||||
ofsBoundingNormals = reader.ReadUInt32();
|
||||
nAttachments = reader.ReadUInt32();
|
||||
ofsAttachments = reader.ReadUInt32();
|
||||
nAttachLookup = reader.ReadUInt32();
|
||||
ofsAttachLookup = reader.ReadUInt32();
|
||||
nEvents = reader.ReadUInt32();
|
||||
ofsEvents = reader.ReadUInt32();
|
||||
nLights = reader.ReadUInt32();
|
||||
ofsLights = reader.ReadUInt32();
|
||||
nCameras = reader.ReadUInt32();
|
||||
ofsCameras = reader.ReadUInt32();
|
||||
nCameraLookup = reader.ReadUInt32();
|
||||
ofsCameraLookup = reader.ReadUInt32();
|
||||
nRibbonEmitters = reader.ReadUInt32();
|
||||
ofsRibbonEmitters = reader.ReadUInt32();
|
||||
nParticleEmitters = reader.ReadUInt32();
|
||||
ofsParticleEmitters = reader.ReadUInt32();
|
||||
nBlendMaps = reader.ReadUInt32();
|
||||
ofsBlendMaps = reader.ReadUInt32();
|
||||
}
|
||||
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
|
||||
public char[] Magic; // "MD20"
|
||||
public uint Version; // The version of the format.
|
||||
public uint lName; // Length of the model's name including the trailing \0
|
||||
public uint ofsName; // Offset to the name, it seems like models can get reloaded by this name.should be unique, i guess.
|
||||
public uint GlobalModelFlags; // 0x0001: tilt x, 0x0002: tilt y, 0x0008: add 2 fields in header, 0x0020: load .phys data (MoP+), 0x0080: has _lod .skin files (MoP?+), 0x0100: is camera related.
|
||||
public uint nGlobalSequences;
|
||||
public uint ofsGlobalSequences; // A list of timestamps.
|
||||
public uint nAnimations;
|
||||
public uint ofsAnimations; // Information about the animations in the model.
|
||||
public uint nAnimationLookup;
|
||||
public uint ofsAnimationLookup; // Mapping of global IDs to the entries in the Animation sequences block.
|
||||
public uint nBones; // MAX_BONES = 0x100
|
||||
public uint ofsBones; // Information about the bones in this model.
|
||||
public uint nKeyBoneLookup;
|
||||
public uint ofsKeyBoneLookup; // Lookup table for key skeletal bones.
|
||||
public uint nVertices;
|
||||
public uint ofsVertices; // Vertices of the model.
|
||||
public uint nViews; // Views (LOD) are now in .skins.
|
||||
public uint nSubmeshAnimations;
|
||||
public uint ofsSubmeshAnimations; // Submesh color and alpha animations definitions.
|
||||
public uint nTextures;
|
||||
public uint ofsTextures; // Textures of this model.
|
||||
public uint nTransparency;
|
||||
public uint ofsTransparency; // Transparency of textures.
|
||||
public uint nUVAnimation;
|
||||
public uint ofsUVAnimation;
|
||||
public uint nTexReplace;
|
||||
public uint ofsTexReplace; // Replaceable Textures.
|
||||
public uint nRenderFlags;
|
||||
public uint ofsRenderFlags; // Blending modes / render flags.
|
||||
public uint nBoneLookupTable;
|
||||
public uint ofsBoneLookupTable; // A bone lookup table.
|
||||
public uint nTexLookup;
|
||||
public uint ofsTexLookup; // The same for textures.
|
||||
public uint nTexUnits; // possibly removed with cata?!
|
||||
public uint ofsTexUnits; // And texture units. Somewhere they have to be too.
|
||||
public uint nTransLookup;
|
||||
public uint ofsTransLookup; // Everything needs its lookup. Here are the transparencies.
|
||||
public uint nUVAnimLookup;
|
||||
public uint ofsUVAnimLookup;
|
||||
public AxisAlignedBox BoundingBox; // min/max( [1].z, 2.0277779f ) - 0.16f seems to be the maximum camera height
|
||||
public float BoundingSphereRadius;
|
||||
public AxisAlignedBox CollisionBox;
|
||||
public float CollisionSphereRadius;
|
||||
public uint nBoundingTriangles;
|
||||
public uint ofsBoundingTriangles; // Our bounding volumes. Similar structure like in the old ofsViews.
|
||||
public uint nBoundingVertices;
|
||||
public uint ofsBoundingVertices;
|
||||
public uint nBoundingNormals;
|
||||
public uint ofsBoundingNormals;
|
||||
public uint nAttachments;
|
||||
public uint ofsAttachments; // Attachments are for weapons etc.
|
||||
public uint nAttachLookup;
|
||||
public uint ofsAttachLookup; // Of course with a lookup.
|
||||
public uint nEvents;
|
||||
public uint ofsEvents; // Used for playing sounds when dying and a lot else.
|
||||
public uint nLights;
|
||||
public uint ofsLights; // Lights are mainly used in loginscreens but in wands and some doodads too.
|
||||
public uint nCameras; // Format of Cameras changed with version 271!
|
||||
public uint ofsCameras; // The cameras are present in most models for having a model in the Character-Tab.
|
||||
public uint nCameraLookup;
|
||||
public uint ofsCameraLookup; // And lookup-time again.
|
||||
public uint nRibbonEmitters;
|
||||
public uint ofsRibbonEmitters; // Things swirling around. See the CoT-entrance for light-trails.
|
||||
public uint nParticleEmitters;
|
||||
public uint ofsParticleEmitters; // Spells and weapons, doodads and loginscreens use them. Blood dripping of a blade? Particles.
|
||||
public uint nBlendMaps; // This has to deal with blending. Exists IFF (flags & 0x8) != 0. When set, textures blending is overriden by the associated array. See M2/WotLK#Blend_mode_overrides
|
||||
public uint ofsBlendMaps; // Same as above. Points to an array of uint16 of nBlendMaps entries -- From WoD information.};
|
||||
}
|
||||
|
||||
struct M2Array
|
||||
{
|
||||
public M2Array(BinaryReader reader, uint offset)
|
||||
{
|
||||
if (offset != 0)
|
||||
reader.BaseStream.Position = offset;
|
||||
|
||||
number = reader.ReadUInt32();
|
||||
offset_elements = reader.ReadUInt32();
|
||||
}
|
||||
|
||||
public uint number;
|
||||
public uint offset_elements;
|
||||
}
|
||||
|
||||
struct M2Track
|
||||
{
|
||||
public void Read(BinaryReader reader)
|
||||
{
|
||||
interpolation_type = reader.ReadUInt16();
|
||||
global_sequence = reader.ReadUInt16();
|
||||
timestamps = new M2Array(reader, 0);
|
||||
values = new M2Array(reader, 0);
|
||||
}
|
||||
|
||||
public ushort interpolation_type;
|
||||
public ushort global_sequence;
|
||||
public M2Array timestamps;
|
||||
public M2Array values;
|
||||
}
|
||||
|
||||
struct M2Camera
|
||||
{
|
||||
public void Read(BinaryReader reader, M2Header header)
|
||||
{
|
||||
reader.BaseStream.Position = header.ofsCameras;
|
||||
type = reader.ReadUInt32();
|
||||
far_clip = reader.ReadSingle();
|
||||
near_clip = reader.ReadSingle();
|
||||
positions.Read(reader);
|
||||
position_base = new Vector3(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
|
||||
target_positions.Read(reader);
|
||||
target_position_base = new Vector3(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
|
||||
rolldata.Read(reader);
|
||||
fovdata.Read(reader);
|
||||
}
|
||||
|
||||
public uint type; // 0: portrait, 1: characterinfo; -1: else (flyby etc.); referenced backwards in the lookup table.
|
||||
public float far_clip;
|
||||
public float near_clip;
|
||||
public M2Track positions; // How the camera's position moves. Should be 3*3 floats.
|
||||
public Vector3 position_base;
|
||||
public M2Track target_positions; // How the target moves. Should be 3*3 floats.
|
||||
public Vector3 target_position_base;
|
||||
public M2Track rolldata; // The camera can have some roll-effect. Its 0 to 2*Pi.
|
||||
public M2Track fovdata; // FoV for this segment
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,179 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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.Constants;
|
||||
using Framework.GameMath;
|
||||
using System;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public sealed class MailTemplateRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Body;
|
||||
}
|
||||
|
||||
public sealed class MapRecord
|
||||
{
|
||||
public uint Id;
|
||||
|
||||
public uint Directory;
|
||||
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)
|
||||
public ushort TimeOfDayOverride;
|
||||
public short ParentMapID;
|
||||
public short CosmeticParentMapID;
|
||||
public ushort WindSettingsID;
|
||||
public MapTypes InstanceType;
|
||||
public byte unk5;
|
||||
public byte ExpansionID;
|
||||
public byte MaxPlayers;
|
||||
public byte TimeOffset;
|
||||
|
||||
//Helpers
|
||||
public Expansion Expansion() { return (Expansion)ExpansionID; }
|
||||
|
||||
public bool IsDungeon() { return (InstanceType == MapTypes.Instance || InstanceType == MapTypes.Raid) && !IsGarrison(); }
|
||||
public bool IsNonRaidDungeon() { return InstanceType == MapTypes.Instance; }
|
||||
public bool Instanceable()
|
||||
{
|
||||
return InstanceType == MapTypes.Instance || InstanceType == MapTypes.Raid
|
||||
|| InstanceType == MapTypes.Battleground || InstanceType == MapTypes.Arena;
|
||||
}
|
||||
public bool IsRaid() { return InstanceType == MapTypes.Raid; }
|
||||
public bool IsBattleground() { return InstanceType == MapTypes.Battleground; }
|
||||
public bool IsBattleArena() { return InstanceType == MapTypes.Arena; }
|
||||
public bool IsBattlegroundOrArena() { return InstanceType == MapTypes.Battleground || InstanceType == MapTypes.Arena; }
|
||||
public bool IsWorldMap() { return InstanceType == MapTypes.Common; }
|
||||
|
||||
public bool GetEntrancePos(out uint mapid, out float x, out float y)
|
||||
{
|
||||
mapid = 0;
|
||||
x = 0;
|
||||
y = 0;
|
||||
|
||||
if (CorpseMapID < 0)
|
||||
return false;
|
||||
mapid = (uint)CorpseMapID;
|
||||
x = CorpsePos.X;
|
||||
y = CorpsePos.Y;
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool IsContinent()
|
||||
{
|
||||
return Id == 0 || Id == 1 || Id == 530 || Id == 571 || Id == 870 || Id == 1116 || Id == 1220;
|
||||
}
|
||||
|
||||
public bool IsDynamicDifficultyMap() { return Flags[0].HasAnyFlag(MapFlags.CanToggleDifficulty); }
|
||||
public bool IsGarrison() { return Flags[0].HasAnyFlag(MapFlags.Garrison); }
|
||||
}
|
||||
|
||||
public sealed class MapDifficultyRecord
|
||||
{
|
||||
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
|
||||
public byte LockID;
|
||||
public byte Flags;
|
||||
public byte ItemBonusTreeModID;
|
||||
public uint Context;
|
||||
|
||||
public uint GetRaidDuration()
|
||||
{
|
||||
if (RaidDurationType == 1)
|
||||
return 86400;
|
||||
if (RaidDurationType == 2)
|
||||
return 604800;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class ModifierTreeRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint[] Asset = new uint[2];
|
||||
public ushort Parent;
|
||||
public byte Type;
|
||||
public byte Unk700;
|
||||
public byte Operator;
|
||||
public byte Amount;
|
||||
}
|
||||
|
||||
public sealed class MountRecord
|
||||
{
|
||||
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 sealed class MountCapabilityRecord
|
||||
{
|
||||
public uint RequiredSpell;
|
||||
public uint SpeedModSpell;
|
||||
public ushort RequiredRidingSkill;
|
||||
public ushort RequiredArea;
|
||||
public short RequiredMap;
|
||||
public MountCapabilityFlags Flags;
|
||||
public uint Id;
|
||||
public uint RequiredAura;
|
||||
}
|
||||
|
||||
public sealed class MountTypeXCapabilityRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ushort MountTypeID;
|
||||
public ushort MountCapabilityID;
|
||||
public byte OrderIndex;
|
||||
}
|
||||
|
||||
public sealed class MountXDisplayRecord
|
||||
{
|
||||
public uint ID;
|
||||
public uint MountID;
|
||||
public uint DisplayID;
|
||||
public uint PlayerConditionID;
|
||||
}
|
||||
|
||||
public sealed class MovieRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint AudioFileDataID;
|
||||
public uint SubtitleFileDataID;
|
||||
public byte Volume;
|
||||
public byte KeyID;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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 WMOAreaTableTripple
|
||||
{
|
||||
public WMOAreaTableTripple(int r, int a, int g)
|
||||
{
|
||||
groupId = g;
|
||||
rootId = r;
|
||||
adtId = a;
|
||||
}
|
||||
|
||||
// ordered by entropy; that way memcmp will have a minimal medium runtime
|
||||
int groupId;
|
||||
int rootId;
|
||||
int adtId;
|
||||
}
|
||||
|
||||
public class TaxiPathBySourceAndDestination
|
||||
{
|
||||
public TaxiPathBySourceAndDestination(uint _id, uint _price)
|
||||
{
|
||||
ID = _id;
|
||||
price = _price;
|
||||
}
|
||||
|
||||
public uint ID;
|
||||
public uint price;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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 sealed class NameGenRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
public byte Race;
|
||||
public byte Sex;
|
||||
}
|
||||
|
||||
public sealed class NamesProfanityRecord
|
||||
{
|
||||
public uint Id;
|
||||
public string Name;
|
||||
public sbyte Language;
|
||||
}
|
||||
|
||||
public sealed class NamesReservedRecord
|
||||
{
|
||||
public uint Id;
|
||||
public string Name;
|
||||
}
|
||||
|
||||
public sealed class NamesReservedLocaleRecord
|
||||
{
|
||||
public uint Id;
|
||||
public string Name;
|
||||
public byte LocaleMask;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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.Constants;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public sealed class OverrideSpellDataRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint[] SpellID = new uint[SharedConst.MaxOverrideSpell];
|
||||
public uint PlayerActionbarFileDataID;
|
||||
public byte Flags;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,178 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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.Constants;
|
||||
using System;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public sealed class PhaseRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ushort Flags;
|
||||
}
|
||||
|
||||
public sealed class PhaseXPhaseGroupRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ushort PhaseId;
|
||||
public ushort PhaseGroupID;
|
||||
}
|
||||
|
||||
public sealed class PlayerConditionRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint RaceMask;
|
||||
public uint SkillLogic;
|
||||
public uint ReputationLogic;
|
||||
public uint PrevQuestLogic;
|
||||
public uint CurrQuestLogic;
|
||||
public uint CurrentCompletedQuestLogic;
|
||||
public uint SpellLogic;
|
||||
public uint ItemLogic;
|
||||
public uint[] Time = new uint[2];
|
||||
public uint AuraSpellLogic;
|
||||
public uint[] AuraSpellID = new uint[4];
|
||||
public uint AchievementLogic;
|
||||
public uint AreaLogic;
|
||||
public uint QuestKillLogic;
|
||||
public LocalizedString FailureDescription;
|
||||
public ushort MinLevel;
|
||||
public ushort MaxLevel;
|
||||
public ushort[] SkillID = new ushort[4];
|
||||
public short[] MinSkill = new short[4];
|
||||
public short[] MaxSkill = new short[4];
|
||||
public ushort MaxFactionID;
|
||||
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 WorldStateExpressionID;
|
||||
public ushort[] Achievement = new ushort[4];
|
||||
public ushort[] AreaID = new ushort[4];
|
||||
public ushort QuestKillID;
|
||||
public ushort PhaseID;
|
||||
public ushort MinAvgEquippedItemLevel;
|
||||
public ushort MaxAvgEquippedItemLevel;
|
||||
public ushort ModifierTreeID;
|
||||
public byte Flags;
|
||||
public sbyte Gender;
|
||||
public sbyte NativeGender;
|
||||
public byte MinLanguage;
|
||||
public byte MaxLanguage;
|
||||
public byte[] MinReputation = new byte[3];
|
||||
public byte MaxReputation;
|
||||
public byte Unknown1;
|
||||
public byte MinPVPRank;
|
||||
public byte MaxPVPRank;
|
||||
public byte PvpMedal;
|
||||
public byte ItemFlags;
|
||||
public byte[] AuraCount = new byte[4];
|
||||
public byte WeatherID;
|
||||
public byte PartyStatus;
|
||||
public byte LifetimeMaxPVPRank;
|
||||
public byte[] LfgStatus = new byte[4];
|
||||
public byte[] LfgCompare = new byte[4];
|
||||
public byte[] CurrencyCount = new byte[4];
|
||||
public sbyte MinExpansionLevel;
|
||||
public sbyte MaxExpansionLevel;
|
||||
public sbyte MinExpansionTier;
|
||||
public sbyte MaxExpansionTier;
|
||||
public byte MinGuildLevel;
|
||||
public byte MaxGuildLevel;
|
||||
public byte PhaseUseFlags;
|
||||
public sbyte ChrSpecializationIndex;
|
||||
public sbyte ChrSpecializationRole;
|
||||
public sbyte PowerType;
|
||||
public sbyte PowerTypeComp;
|
||||
public sbyte PowerTypeValue;
|
||||
public int ClassMask;
|
||||
public uint LanguageID;
|
||||
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 LfgLogic;
|
||||
public uint[] LfgValue = new uint[4];
|
||||
public uint CurrencyLogic;
|
||||
public uint[] CurrencyID = new uint[4];
|
||||
public uint[] QuestKillMonster = new uint[6];
|
||||
public uint PhaseGroupID;
|
||||
public uint MinAvgItemLevel;
|
||||
public uint MaxAvgItemLevel;
|
||||
public int[] MovementFlags = new int[2];
|
||||
public uint MainHandItemSubclassMask;
|
||||
}
|
||||
|
||||
public sealed class PowerDisplayRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint GlobalStringBaseTag;
|
||||
public byte PowerType;
|
||||
public byte Red;
|
||||
public byte Green;
|
||||
public byte Blue;
|
||||
}
|
||||
|
||||
public sealed class PowerTypeRecord
|
||||
{
|
||||
public uint Id;
|
||||
public string PowerTypeToken;
|
||||
public string PowerCostToken;
|
||||
public float RegenerationPeace;
|
||||
public float RegenerationCombat;
|
||||
public short MaxPower;
|
||||
public ushort RegenerationDelay;
|
||||
public ushort Flags;
|
||||
public PowerType PowerTypeEnum;
|
||||
public sbyte RegenerationMin;
|
||||
public sbyte RegenerationCenter;
|
||||
public sbyte RegenerationMax;
|
||||
public byte UIModifier;
|
||||
}
|
||||
|
||||
public sealed class PrestigeLevelInfoRecord
|
||||
{
|
||||
public uint ID;
|
||||
public uint IconID;
|
||||
public LocalizedString PrestigeText;
|
||||
public byte PrestigeLevel;
|
||||
public PrestigeLevelInfoFlags Flags;
|
||||
|
||||
public bool IsDisabled() { return Flags.HasAnyFlag(PrestigeLevelInfoFlags.Disabled); }
|
||||
}
|
||||
|
||||
public sealed class PvpDifficultyRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ushort MapID;
|
||||
public byte BracketID;
|
||||
public byte MinLevel;
|
||||
public byte MaxLevel;
|
||||
|
||||
// helpers
|
||||
public BattlegroundBracketId GetBracketId() { return (BattlegroundBracketId)BracketID; }
|
||||
}
|
||||
|
||||
public sealed class PvpRewardRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint HonorLevel;
|
||||
public uint Prestige;
|
||||
public uint RewardPackID;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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.Constants;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public sealed class QuestFactionRewardRecord
|
||||
{
|
||||
public uint Id;
|
||||
public short[] QuestRewFactionValue = new short[10];
|
||||
}
|
||||
|
||||
public sealed class QuestMoneyRewardRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint[] Money = new uint[10];
|
||||
}
|
||||
|
||||
public sealed class QuestPackageItemRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint ItemID;
|
||||
public ushort QuestPackageID;
|
||||
public QuestPackageFilter FilterType;
|
||||
public byte ItemCount;
|
||||
}
|
||||
|
||||
public sealed class QuestSortRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString SortName;
|
||||
public byte SortOrder;
|
||||
}
|
||||
|
||||
public sealed class QuestV2Record
|
||||
{
|
||||
public uint Id;
|
||||
public ushort UniqueBitFlag;
|
||||
}
|
||||
|
||||
public sealed class QuestXPRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ushort[] Exp = new ushort[10];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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 sealed class RandPropPointsRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint[] EpicPropertiesPoints = new uint[5];
|
||||
public uint[] RarePropertiesPoints = new uint[5];
|
||||
public uint[] UncommonPropertiesPoints = new uint[5];
|
||||
}
|
||||
|
||||
public sealed class RewardPackRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint Money;
|
||||
public float ArtifactXPMultiplier;
|
||||
public byte ArtifactXPDifficulty;
|
||||
public byte ArtifactCategoryID;
|
||||
public uint TitleID;
|
||||
public uint Unused;
|
||||
}
|
||||
|
||||
public sealed class RewardPackXItemRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint ItemID;
|
||||
public uint RewardPackID;
|
||||
public uint Amount;
|
||||
}
|
||||
|
||||
public sealed class RulesetItemUpgradeRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint ItemID;
|
||||
public ushort ItemUpgradeID;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,560 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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.Constants;
|
||||
using Framework.Dynamic;
|
||||
using System;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public sealed class ScalingStatDistributionRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ushort ItemLevelCurveID;
|
||||
public uint MinLevel;
|
||||
public uint MaxLevel;
|
||||
}
|
||||
|
||||
public sealed class ScenarioRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
public ushort Data; // Seems to indicate different things, for zone invasions, this is the area id
|
||||
public byte Flags;
|
||||
public byte Type;
|
||||
}
|
||||
|
||||
public sealed class ScenarioStepRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Description;
|
||||
public LocalizedString Name;
|
||||
public ushort CriteriaTreeID;
|
||||
public ushort ScenarioID;
|
||||
public ushort PreviousStepID; // Used in conjunction with Proving Grounds scenarios, when sequencing steps (Not using step order?)
|
||||
public ushort QuestRewardID;
|
||||
public byte Step;
|
||||
public ScenarioStepFlags Flags;
|
||||
public uint BonusRequiredStepID; // Bonus step can only be completed if scenario is in the step specified in this field
|
||||
|
||||
// helpers
|
||||
public bool IsBonusObjective()
|
||||
{
|
||||
return Flags.HasAnyFlag(ScenarioStepFlags.BonusObjective);
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class SceneScriptRecord
|
||||
{
|
||||
public uint Id;
|
||||
public string Name;
|
||||
public string Script;
|
||||
public ushort PrevScriptId;
|
||||
public ushort NextScriptId;
|
||||
}
|
||||
|
||||
public sealed class SceneScriptPackageRecord
|
||||
{
|
||||
public uint Id;
|
||||
public string Name;
|
||||
}
|
||||
|
||||
public sealed class SkillLineRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString DisplayName;
|
||||
public LocalizedString Description;
|
||||
public LocalizedString AlternateVerb;
|
||||
public ushort Flags;
|
||||
public SkillCategory CategoryID;
|
||||
public byte CanLink;
|
||||
public uint IconFileDataID;
|
||||
public uint ParentSkillLineID;
|
||||
}
|
||||
|
||||
public sealed class SkillLineAbilityRecord
|
||||
{
|
||||
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 sealed class SkillRaceClassInfoRecord
|
||||
{
|
||||
public uint Id;
|
||||
public int RaceMask;
|
||||
public ushort SkillID;
|
||||
public SkillRaceClassInfoFlags Flags;
|
||||
public ushort SkillTierID;
|
||||
public byte Availability;
|
||||
public byte MinLevel;
|
||||
public int ClassMask;
|
||||
}
|
||||
|
||||
public sealed class SoundKitRecord
|
||||
{
|
||||
public LocalizedString Name;
|
||||
public float VolumeFloat;
|
||||
public float MinDistance;
|
||||
public float DistanceCutoff;
|
||||
public float VolumeVariationPlus;
|
||||
public float VolumeVariationMinus;
|
||||
public float PitchVariationPlus;
|
||||
public float PitchVariationMinus;
|
||||
public float PitchAdjust;
|
||||
public ushort Flags;
|
||||
public ushort SoundEntriesAdvancedID;
|
||||
public ushort BusOverwriteID;
|
||||
public byte SoundType;
|
||||
public byte EAXDef;
|
||||
public byte DialogType;
|
||||
public byte Unk700;
|
||||
public uint Id;
|
||||
}
|
||||
|
||||
public sealed class SpecializationSpellsRecord
|
||||
{
|
||||
public uint SpellID;
|
||||
public uint OverridesSpellID;
|
||||
public LocalizedString Description;
|
||||
public ushort SpecID;
|
||||
public byte OrderIndex;
|
||||
public uint Id;
|
||||
}
|
||||
|
||||
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 sealed class SpellAuraOptionsRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public uint ProcCharges;
|
||||
public uint ProcTypeMask;
|
||||
public uint ProcCategoryRecovery;
|
||||
public ushort CumulativeAura;
|
||||
public byte DifficultyID;
|
||||
public byte ProcChance;
|
||||
public byte SpellProcsPerMinuteID;
|
||||
}
|
||||
|
||||
public sealed class SpellAuraRestrictionsRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public uint CasterAuraSpell;
|
||||
public uint TargetAuraSpell;
|
||||
public uint ExcludeCasterAuraSpell;
|
||||
public uint ExcludeTargetAuraSpell;
|
||||
public byte DifficultyID;
|
||||
public byte CasterAuraState;
|
||||
public byte TargetAuraState;
|
||||
public byte ExcludeCasterAuraState;
|
||||
public byte ExcludeTargetAuraState;
|
||||
}
|
||||
|
||||
public sealed class SpellCastTimesRecord
|
||||
{
|
||||
public uint Id;
|
||||
public int CastTime;
|
||||
public int MinCastTime;
|
||||
public short CastTimePerLevel;
|
||||
}
|
||||
|
||||
public sealed class SpellCastingRequirementsRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public ushort MinFactionID;
|
||||
public ushort RequiredAreasID;
|
||||
public ushort RequiresSpellFocus;
|
||||
public byte FacingCasterFlags;
|
||||
public byte MinReputation;
|
||||
public byte RequiredAuraVision;
|
||||
}
|
||||
|
||||
public sealed class SpellCategoriesRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public ushort Category;
|
||||
public ushort StartRecoveryCategory;
|
||||
public ushort ChargeCategory;
|
||||
public byte DifficultyID;
|
||||
public byte DefenseType;
|
||||
public byte DispelType;
|
||||
public byte Mechanic;
|
||||
public byte PreventionType;
|
||||
}
|
||||
|
||||
public sealed class SpellCategoryRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
public int ChargeRecoveryTime;
|
||||
public SpellCategoryFlags Flags;
|
||||
public byte UsesPerWeek;
|
||||
public byte MaxCharges;
|
||||
public uint ChargeCategoryType;
|
||||
}
|
||||
|
||||
public sealed class SpellClassOptionsRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public FlagArray128 SpellClassMask;
|
||||
public byte SpellClassSet;
|
||||
public uint ModalNextSpell;
|
||||
}
|
||||
|
||||
public sealed class SpellCooldownsRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public uint CategoryRecoveryTime;
|
||||
public uint RecoveryTime;
|
||||
public uint StartRecoveryTime;
|
||||
public byte DifficultyID;
|
||||
}
|
||||
|
||||
public sealed class SpellDurationRecord
|
||||
{
|
||||
public uint Id;
|
||||
public int Duration;
|
||||
public int MaxDuration;
|
||||
public int DurationPerLevel;
|
||||
}
|
||||
|
||||
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 uint DifficultyID;
|
||||
public float EffectAmplitude;
|
||||
public uint EffectAuraPeriod;
|
||||
public float EffectBonusCoefficient;
|
||||
public float EffectChainAmplitude;
|
||||
public uint EffectChainTargets;
|
||||
public int EffectDieSides;
|
||||
public uint EffectItemType;
|
||||
public uint EffectMechanic;
|
||||
public float EffectPointsPerResource;
|
||||
public float EffectRealPointsPerLevel;
|
||||
public uint EffectTriggerSpell;
|
||||
public float EffectPosFacing;
|
||||
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 sealed class SpellEquippedItemsRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public int EquippedItemInventoryTypeMask;
|
||||
public int EquippedItemSubClassMask;
|
||||
public sbyte EquippedItemClass;
|
||||
}
|
||||
|
||||
public sealed class SpellFocusObjectRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
}
|
||||
|
||||
public sealed class SpellInterruptsRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public uint[] AuraInterruptFlags = new uint[2];
|
||||
public uint[] ChannelInterruptFlags = new uint[2];
|
||||
public ushort InterruptFlags;
|
||||
public byte DifficultyID;
|
||||
}
|
||||
|
||||
public sealed class SpellItemEnchantmentRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint[] EffectSpellID = new uint[ItemConst.MaxItemEnchantmentEffects];
|
||||
public LocalizedString Name;
|
||||
public float[] EffectScalingPoints = new float[ItemConst.MaxItemEnchantmentEffects];
|
||||
public uint TransmogCost;
|
||||
public uint TextureFileDataID;
|
||||
public ushort[] EffectPointsMin = new ushort[ItemConst.MaxItemEnchantmentEffects];
|
||||
public ushort ItemVisual;
|
||||
public EnchantmentSlotMask Flags;
|
||||
public ushort RequiredSkillID;
|
||||
public ushort RequiredSkillRank;
|
||||
public ushort ItemLevel;
|
||||
public byte Charges;
|
||||
public ItemEnchantmentType[] Effect = new ItemEnchantmentType[ItemConst.MaxItemEnchantmentEffects];
|
||||
public byte ConditionID;
|
||||
public byte MinLevel;
|
||||
public byte MaxLevel;
|
||||
public sbyte ScalingClass;
|
||||
public sbyte ScalingClassRestricted;
|
||||
public uint PlayerConditionID;
|
||||
}
|
||||
|
||||
public sealed class SpellItemEnchantmentConditionRecord
|
||||
{
|
||||
public uint Id;
|
||||
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
|
||||
{
|
||||
public uint Id;
|
||||
public uint LearnSpellID;
|
||||
public uint SpellID;
|
||||
public uint OverridesSpellID;
|
||||
}
|
||||
|
||||
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 sealed class SpellMiscRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint Attributes;
|
||||
public uint AttributesEx;
|
||||
public uint AttributesExB;
|
||||
public uint AttributesExC;
|
||||
public uint AttributesExD;
|
||||
public uint AttributesExE;
|
||||
public uint AttributesExF;
|
||||
public uint AttributesExG;
|
||||
public uint AttributesExH;
|
||||
public uint AttributesExI;
|
||||
public uint AttributesExJ;
|
||||
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 sealed class SpellPowerRecord
|
||||
{
|
||||
public uint SpellID;
|
||||
public int ManaCost;
|
||||
public float ManaCostPercentage;
|
||||
public float ManaCostPercentagePerSecond;
|
||||
public uint RequiredAura;
|
||||
public float HealthCostPercentage;
|
||||
public byte PowerIndex;
|
||||
public PowerType PowerType;
|
||||
public uint Id;
|
||||
public int ManaCostPerLevel;
|
||||
public int 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 sealed class SpellPowerDifficultyRecord
|
||||
{
|
||||
public byte DifficultyID;
|
||||
public byte PowerIndex;
|
||||
public uint Id;
|
||||
}
|
||||
|
||||
public sealed class SpellProcsPerMinuteRecord
|
||||
{
|
||||
public uint Id;
|
||||
public float BaseProcRate;
|
||||
public byte Flags;
|
||||
}
|
||||
|
||||
public sealed class SpellProcsPerMinuteModRecord
|
||||
{
|
||||
public uint Id;
|
||||
public float Coeff;
|
||||
public ushort Param;
|
||||
public SpellProcsPerMinuteModType Type;
|
||||
public byte SpellProcsPerMinuteID;
|
||||
}
|
||||
|
||||
public sealed class SpellRadiusRecord
|
||||
{
|
||||
public uint Id;
|
||||
public float Radius;
|
||||
public float RadiusPerLevel;
|
||||
public float RadiusMin;
|
||||
public float RadiusMax;
|
||||
}
|
||||
|
||||
public sealed class SpellRangeRecord
|
||||
{
|
||||
public uint Id;
|
||||
public float MinRangeHostile;
|
||||
public float MinRangeFriend;
|
||||
public float MaxRangeHostile;
|
||||
public float MaxRangeFriend;
|
||||
public LocalizedString DisplayName;
|
||||
public LocalizedString DisplayNameShort;
|
||||
public SpellRangeFlag Flags;
|
||||
}
|
||||
|
||||
public sealed class SpellReagentsRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public int[] Reagent = new int[SpellConst.MaxReagents];
|
||||
public ushort[] ReagentCount = new ushort[SpellConst.MaxReagents];
|
||||
}
|
||||
|
||||
public sealed class SpellScalingRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public ushort ScalesFromItemLevel;
|
||||
public int ScalingClass;
|
||||
public uint MinScalingLevel;
|
||||
public uint MaxScalingLevel;
|
||||
}
|
||||
|
||||
public sealed class SpellShapeshiftRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public uint[] ShapeshiftExclude = new uint[2];
|
||||
public uint[] ShapeshiftMask = new uint[2];
|
||||
public byte StanceBarOrder;
|
||||
}
|
||||
|
||||
public sealed class SpellShapeshiftFormRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
public float WeaponDamageVariance;
|
||||
public SpellShapeshiftFormFlags Flags;
|
||||
public ushort CombatRoundTime;
|
||||
public ushort MountTypeID;
|
||||
public sbyte CreatureType;
|
||||
public byte BonusActionBar;
|
||||
public uint AttackIconFileDataID;
|
||||
public ushort[] CreatureDisplayID = new ushort[4];
|
||||
public ushort[] PresetSpellID = new ushort[SpellConst.MaxShapeshift];
|
||||
}
|
||||
|
||||
public sealed class SpellTargetRestrictionsRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public float ConeAngle;
|
||||
public float Width;
|
||||
public uint Targets;
|
||||
public ushort TargetCreatureType;
|
||||
public byte DifficultyID;
|
||||
public byte MaxAffectedTargets;
|
||||
public uint MaxTargetLevel;
|
||||
}
|
||||
|
||||
public sealed class SpellTotemsRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public uint[] Totem = new uint[SpellConst.MaxTotems];
|
||||
public ushort[] RequiredTotemCategoryID = new ushort[SpellConst.MaxTotems];
|
||||
}
|
||||
|
||||
public sealed class SpellXSpellVisualRecord
|
||||
{
|
||||
public uint SpellID;
|
||||
public uint SpellVisualID;
|
||||
public uint Id;
|
||||
public float Chance;
|
||||
public ushort CasterPlayerConditionID;
|
||||
public ushort CasterUnitConditionID;
|
||||
public ushort PlayerConditionID;
|
||||
public ushort UnitConditionID;
|
||||
public uint IconFileDataID;
|
||||
public uint ActiveIconFileDataID;
|
||||
public byte Flags;
|
||||
public byte DifficultyID;
|
||||
public byte Priority;
|
||||
}
|
||||
|
||||
public sealed class SummonPropertiesRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint Flags;
|
||||
public SummonCategory Category;
|
||||
public uint Faction;
|
||||
public SummonType Type;
|
||||
public int Slot;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,147 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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.Constants;
|
||||
using Framework.GameMath;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public sealed class TactKeyRecord
|
||||
{
|
||||
public uint Id;
|
||||
public byte[] Key = new byte[16];
|
||||
}
|
||||
|
||||
public sealed class TalentRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint SpellID;
|
||||
public uint OverridesSpellID;
|
||||
public LocalizedString Description;
|
||||
public ushort SpecID;
|
||||
public byte TierID;
|
||||
public byte ColumnIndex;
|
||||
public byte Flags;
|
||||
public byte[] CategoryMask = new byte[2];
|
||||
public byte ClassID;
|
||||
}
|
||||
|
||||
public sealed class TaxiNodesRecord
|
||||
{
|
||||
public Vector3 Pos;
|
||||
public LocalizedString Name;
|
||||
public uint[] MountCreatureID = new uint[2];
|
||||
public Vector2 MapOffset;
|
||||
public ushort MapID;
|
||||
public ushort ConditionID;
|
||||
public ushort LearnableIndex;
|
||||
public TaxiNodeFlags Flags;
|
||||
public uint Id;
|
||||
}
|
||||
|
||||
public sealed class TaxiPathRecord
|
||||
{
|
||||
public ushort From;
|
||||
public ushort To;
|
||||
public uint Id;
|
||||
public uint Cost;
|
||||
}
|
||||
|
||||
public sealed class TaxiPathNodeRecord
|
||||
{
|
||||
public Vector3 Loc;
|
||||
public uint Delay;
|
||||
public ushort PathID;
|
||||
public ushort MapID;
|
||||
public ushort ArrivalEventID;
|
||||
public ushort DepartureEventID;
|
||||
public byte NodeIndex;
|
||||
public TaxiPathNodeFlags Flags;
|
||||
public uint Id;
|
||||
}
|
||||
|
||||
public sealed class TotemCategoryRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
public uint CategoryMask;
|
||||
public byte CategoryType;
|
||||
}
|
||||
|
||||
public sealed class ToyRecord
|
||||
{
|
||||
public uint ItemID;
|
||||
public LocalizedString Description;
|
||||
public byte Flags;
|
||||
public byte CategoryFilter;
|
||||
public uint Id;
|
||||
}
|
||||
|
||||
public sealed class TransmogHolidayRecord
|
||||
{
|
||||
public uint Id;
|
||||
public int HolidayID;
|
||||
}
|
||||
|
||||
public sealed class TransmogSetRecord
|
||||
{
|
||||
public LocalizedString Name;
|
||||
public ushort BaseSetID;
|
||||
public ushort UIOrder;
|
||||
public byte ExpansionID;
|
||||
public uint Id;
|
||||
public int Flags;
|
||||
public int QuestID;
|
||||
public int ClassMask;
|
||||
public int ItemNameDescriptionID;
|
||||
public uint TransmogSetGroupID;
|
||||
}
|
||||
|
||||
public sealed class TransmogSetGroupRecord
|
||||
{
|
||||
public LocalizedString Label;
|
||||
public uint Id;
|
||||
}
|
||||
|
||||
public sealed class TransmogSetItemRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint TransmogSetID;
|
||||
public uint ItemModifiedAppearanceID;
|
||||
public int Flags;
|
||||
}
|
||||
|
||||
public sealed class TransportAnimationRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint TransportID;
|
||||
public uint TimeIndex;
|
||||
public Vector3 Pos;
|
||||
public byte SequenceID;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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 sealed class UnitPowerBarRecord
|
||||
{
|
||||
public uint Id;
|
||||
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 uint MaxPower;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,137 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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.Constants;
|
||||
using Framework.GameMath;
|
||||
using System;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public sealed class VehicleRecord
|
||||
{
|
||||
public uint Id;
|
||||
public VehicleFlags Flags;
|
||||
public float TurnSpeed;
|
||||
public float PitchSpeed;
|
||||
public float PitchMin;
|
||||
public float PitchMax;
|
||||
public float MouseLookOffsetPitch;
|
||||
public float CameraFadeDistScalarMin;
|
||||
public float CameraFadeDistScalarMax;
|
||||
public float CameraPitchOffset;
|
||||
public float FacingLimitRight;
|
||||
public float FacingLimitLeft;
|
||||
public float MsslTrgtTurnLingering;
|
||||
public float MsslTrgtPitchLingering;
|
||||
public float MsslTrgtMouseLingering;
|
||||
public float MsslTrgtEndOpacity;
|
||||
public float MsslTrgtArcSpeed;
|
||||
public float MsslTrgtArcRepeat;
|
||||
public float MsslTrgtArcWidth;
|
||||
public float[] MsslTrgtImpactRadius = new float[2];
|
||||
public string MsslTrgtArcTexture;
|
||||
public string MsslTrgtImpactTexture;
|
||||
public string[] MsslTrgtImpactModel = new string[2];
|
||||
public float CameraYawOffset;
|
||||
public float MsslTrgtImpactTexRadius;
|
||||
public ushort[] SeatID = new ushort[SharedConst.MaxVehicleSeats];
|
||||
public ushort VehicleUIIndicatorID;
|
||||
public ushort[] PowerDisplayID = new ushort[3];
|
||||
public byte FlagsB;
|
||||
public byte UILocomotionType;
|
||||
}
|
||||
|
||||
public sealed class VehicleSeatRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint[] Flags = new uint[3];
|
||||
public Vector3 AttachmentOffset;
|
||||
public float EnterPreDelay;
|
||||
public float EnterSpeed;
|
||||
public float EnterGravity;
|
||||
public float EnterMinDuration;
|
||||
public float EnterMaxDuration;
|
||||
public float EnterMinArcHeight;
|
||||
public float EnterMaxArcHeight;
|
||||
public float ExitPreDelay;
|
||||
public float ExitSpeed;
|
||||
public float ExitGravity;
|
||||
public float ExitMinDuration;
|
||||
public float ExitMaxDuration;
|
||||
public float ExitMinArcHeight;
|
||||
public float ExitMaxArcHeight;
|
||||
public float PassengerYaw;
|
||||
public float PassengerPitch;
|
||||
public float PassengerRoll;
|
||||
public float VehicleEnterAnimDelay;
|
||||
public float VehicleExitAnimDelay;
|
||||
public float CameraEnteringDelay;
|
||||
public float CameraEnteringDuration;
|
||||
public float CameraExitingDelay;
|
||||
public float CameraExitingDuration;
|
||||
public Vector3 CameraOffset;
|
||||
public float CameraPosChaseRate;
|
||||
public float CameraFacingChaseRate;
|
||||
public float CameraEnteringZoom;
|
||||
public float CameraSeatZoomMin;
|
||||
public float CameraSeatZoomMax;
|
||||
public uint UISkinFileDataID;
|
||||
public short EnterAnimStart;
|
||||
public short EnterAnimLoop;
|
||||
public short RideAnimStart;
|
||||
public short RideAnimLoop;
|
||||
public short RideUpperAnimStart;
|
||||
public short RideUpperAnimLoop;
|
||||
public short ExitAnimStart;
|
||||
public short ExitAnimLoop;
|
||||
public short ExitAnimEnd;
|
||||
public short VehicleEnterAnim;
|
||||
public short VehicleExitAnim;
|
||||
public short VehicleRideAnimLoop;
|
||||
public ushort EnterAnimKitID;
|
||||
public ushort RideAnimKitID;
|
||||
public ushort ExitAnimKitID;
|
||||
public ushort VehicleEnterAnimKitID;
|
||||
public ushort VehicleRideAnimKitID;
|
||||
public ushort VehicleExitAnimKitID;
|
||||
public ushort CameraModeID;
|
||||
public sbyte AttachmentID;
|
||||
public sbyte PassengerAttachmentID;
|
||||
public sbyte VehicleEnterAnimBone;
|
||||
public sbyte VehicleExitAnimBone;
|
||||
public sbyte VehicleRideAnimLoopBone;
|
||||
public byte VehicleAbilityDisplay;
|
||||
public uint EnterUISoundID;
|
||||
public uint ExitUISoundID;
|
||||
|
||||
|
||||
public bool CanEnterOrExit()
|
||||
{
|
||||
return (Flags[0].HasAnyFlag((uint)VehicleSeatFlags.CanEnterOrExit) ||
|
||||
//If it has anmation for enter/ride, means it can be entered/exited by logic
|
||||
Flags[0].HasAnyFlag((uint)VehicleSeatFlags.HasLowerAnimForEnter | (uint)VehicleSeatFlags.HasLowerAnimForRide));
|
||||
}
|
||||
public bool CanSwitchFromSeat() { return Flags[0].HasAnyFlag((uint)VehicleSeatFlags.CanSwitch); }
|
||||
public bool IsUsableByOverride()
|
||||
{
|
||||
return Flags[0].HasAnyFlag((uint)VehicleSeatFlags.Uncontrolled | (uint)VehicleSeatFlags.Unk18)
|
||||
|| Flags[1].HasAnyFlag((uint)VehicleSeatFlagsB.UsableForced | (uint)VehicleSeatFlagsB.UsableForced2 |
|
||||
(uint)VehicleSeatFlagsB.UsableForced3 | (uint)VehicleSeatFlagsB.UsableForced4);
|
||||
}
|
||||
public bool IsEjectable() { return Flags[1].HasAnyFlag((uint)VehicleSeatFlagsB.Ejectable); }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2017 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.Constants;
|
||||
using Framework.GameMath;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
public sealed class WMOAreaTableRecord
|
||||
{
|
||||
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;
|
||||
public ushort AreaTableID;
|
||||
public ushort UWIntroSound;
|
||||
public ushort UWAmbience;
|
||||
public sbyte NameSet; // used in adt file
|
||||
public byte SoundProviderPref;
|
||||
public byte SoundProviderPrefUnderwater;
|
||||
public byte Flags;
|
||||
public uint I;
|
||||
public uint UWZoneMusic;
|
||||
}
|
||||
|
||||
public sealed class WorldMapAreaRecord
|
||||
{
|
||||
public string AreaName;
|
||||
public float LocLeft;
|
||||
public float LocRight;
|
||||
public float LocTop;
|
||||
public float LocBottom;
|
||||
public ushort MapID;
|
||||
public ushort AreaID;
|
||||
public short DisplayMapID;
|
||||
public short DefaultDungeonFloor;
|
||||
public ushort ParentWorldMapID;
|
||||
public ushort Flags;
|
||||
public byte LevelRangeMin;
|
||||
public byte LevelRangeMax;
|
||||
public byte BountySetID;
|
||||
public byte BountyBoardLocation;
|
||||
public uint Id;
|
||||
public uint PlayerConditionID;
|
||||
}
|
||||
|
||||
public sealed class WorldMapOverlayRecord
|
||||
{
|
||||
public uint Id;
|
||||
public string TextureName;
|
||||
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 sealed class WorldMapTransformsRecord
|
||||
{
|
||||
public uint Id;
|
||||
public Vector3 RegionMin;
|
||||
public Vector3 RegionMax;
|
||||
public Vector2 RegionOffset;
|
||||
public float RegionScale;
|
||||
public ushort MapID;
|
||||
public ushort AreaID;
|
||||
public ushort NewMapID;
|
||||
public ushort NewDungeonMapID;
|
||||
public ushort NewAreaID;
|
||||
public byte Flags;
|
||||
}
|
||||
|
||||
public sealed class WorldSafeLocsRecord
|
||||
{
|
||||
public uint Id;
|
||||
public Vector3 Loc;
|
||||
public float Facing;
|
||||
public LocalizedString AreaName;
|
||||
public ushort MapID;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user