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:
Fabian
2017-10-26 17:23:44 +02:00
parent 227702e19c
commit a3dc7b3f48
844 changed files with 26064 additions and 1824 deletions
@@ -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;
}
}