mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-13 03:32:28 -04:00
Core/Misc: DBC std::array refactors, and |Hachievement unit tests
This commit is contained in:
@@ -405,6 +405,8 @@ class TC_GAME_API AchievementGlobalMgr
|
||||
|
||||
AchievementRewards m_achievementRewards;
|
||||
AchievementRewardLocales m_achievementRewardLocales;
|
||||
|
||||
friend class UnitTestDataLoader;
|
||||
};
|
||||
|
||||
#define sAchievementMgr AchievementGlobalMgr::instance()
|
||||
|
||||
@@ -796,7 +796,7 @@ void AuctionHouseObject::BuildListAuctionItems(WorldPacket& data, Player* player
|
||||
// These are found in ItemRandomSuffix.dbc and ItemRandomProperties.dbc
|
||||
// even though the DBC names seem misleading
|
||||
|
||||
char* const* suffix = nullptr;
|
||||
char const* const* suffix = nullptr;
|
||||
|
||||
if (propRefID < 0)
|
||||
{
|
||||
|
||||
@@ -58,13 +58,17 @@ class HyperlinkDataTokenizer
|
||||
bool Trinity::Hyperlinks::LinkTags::achievement::StoreTo(AchievementLinkData& val, std::string_view text)
|
||||
{
|
||||
HyperlinkDataTokenizer t(text);
|
||||
|
||||
uint32 achievementId;
|
||||
if (!t.TryConsumeTo(achievementId))
|
||||
return false;
|
||||
val.Achievement = sAchievementMgr->GetAchievement(achievementId);
|
||||
if (!(val.Achievement && t.TryConsumeTo(val.CharacterId) && t.TryConsumeTo(val.IsFinished) &&
|
||||
t.TryConsumeTo(val.Month) && t.TryConsumeTo(val.Day)))
|
||||
|
||||
if (!(val.Achievement && t.TryConsumeTo(val.CharacterId) && t.TryConsumeTo(val.IsFinished) && t.TryConsumeTo(val.Month) && t.TryConsumeTo(val.Day)))
|
||||
return false;
|
||||
if ((12 < val.Month) || (31 < val.Day))
|
||||
return false;
|
||||
|
||||
int8 year;
|
||||
if (!t.TryConsumeTo(year))
|
||||
return false;
|
||||
@@ -77,8 +81,7 @@ bool Trinity::Hyperlinks::LinkTags::achievement::StoreTo(AchievementLinkData& va
|
||||
else
|
||||
val.Year = 0;
|
||||
|
||||
return (t.TryConsumeTo(val.Criteria[0]) &&
|
||||
t.TryConsumeTo(val.Criteria[1]) && t.TryConsumeTo(val.Criteria[2]) && t.TryConsumeTo(val.Criteria[3]) && t.IsEmpty());
|
||||
return (t.TryConsumeTo(val.Criteria[0]) && t.TryConsumeTo(val.Criteria[1]) && t.TryConsumeTo(val.Criteria[2]) && t.TryConsumeTo(val.Criteria[3]) && t.IsEmpty());
|
||||
}
|
||||
|
||||
bool Trinity::Hyperlinks::LinkTags::enchant::StoreTo(SpellInfo const*& val, std::string_view text)
|
||||
|
||||
@@ -676,14 +676,14 @@ SimpleFactionsList const* GetFactionTeamList(uint32 faction)
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
char* GetPetName(uint32 petfamily, uint32 dbclang)
|
||||
char const* GetPetName(uint32 petfamily, uint32 dbclang)
|
||||
{
|
||||
if (!petfamily)
|
||||
return nullptr;
|
||||
CreatureFamilyEntry const* pet_family = sCreatureFamilyStore.LookupEntry(petfamily);
|
||||
if (!pet_family)
|
||||
return nullptr;
|
||||
return pet_family->Name[dbclang]?pet_family->Name[dbclang]:nullptr;
|
||||
return pet_family->Name[dbclang];
|
||||
}
|
||||
|
||||
TalentSpellPos const* GetTalentSpellPos(uint32 spellId)
|
||||
|
||||
@@ -36,7 +36,7 @@ enum LocaleConstant : uint8;
|
||||
typedef std::list<uint32> SimpleFactionsList;
|
||||
TC_GAME_API SimpleFactionsList const* GetFactionTeamList(uint32 faction);
|
||||
|
||||
TC_GAME_API char* GetPetName(uint32 petfamily, uint32 dbclang);
|
||||
TC_GAME_API char const* GetPetName(uint32 petfamily, uint32 dbclang);
|
||||
TC_GAME_API uint32 GetTalentSpellCost(uint32 spellId);
|
||||
TC_GAME_API TalentSpellPos const* GetTalentSpellPos(uint32 spellId);
|
||||
|
||||
|
||||
@@ -7869,7 +7869,7 @@ std::string ObjectMgr::GeneratePetName(uint32 entry)
|
||||
if (!cinfo)
|
||||
return std::string();
|
||||
|
||||
char* petname = GetPetName(cinfo->family, sWorld->GetDefaultDbcLocale());
|
||||
char const* petname = GetPetName(cinfo->family, sWorld->GetDefaultDbcLocale());
|
||||
if (petname)
|
||||
return std::string(petname);
|
||||
else
|
||||
|
||||
@@ -867,13 +867,14 @@ void Spell::SelectEffectImplicitTargets(SpellEffIndex effIndex, SpellImplicitTar
|
||||
case TARGET_SELECT_CATEGORY_NEARBY:
|
||||
case TARGET_SELECT_CATEGORY_CONE:
|
||||
case TARGET_SELECT_CATEGORY_AREA:
|
||||
{
|
||||
// targets for effect already selected
|
||||
if (effectMask & processedEffectMask)
|
||||
return;
|
||||
std::array<SpellEffectInfo, MAX_SPELL_EFFECTS> const& effects = GetSpellInfo()->Effects;
|
||||
// choose which targets we can select at once
|
||||
for (uint32 j = effIndex + 1; j < MAX_SPELL_EFFECTS; ++j)
|
||||
for (uint32 j = effIndex + 1; j < effects.size(); ++j)
|
||||
{
|
||||
SpellEffectInfo const* effects = GetSpellInfo()->Effects;
|
||||
if (effects[j].IsEffect() &&
|
||||
effects[effIndex].TargetA.GetTarget() == effects[j].TargetA.GetTarget() &&
|
||||
effects[effIndex].TargetB.GetTarget() == effects[j].TargetB.GetTarget() &&
|
||||
@@ -886,6 +887,7 @@ void Spell::SelectEffectImplicitTargets(SpellEffIndex effIndex, SpellImplicitTar
|
||||
}
|
||||
processedEffectMask |= effectMask;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -211,8 +211,8 @@ uint32 SpellImplicitTargetInfo::GetExplicitTargetMask(bool& srcSet, bool& dstSet
|
||||
return targetMask;
|
||||
}
|
||||
|
||||
SpellImplicitTargetInfo::StaticData SpellImplicitTargetInfo::_data[TOTAL_SPELL_TARGETS] =
|
||||
{
|
||||
std::array<SpellImplicitTargetInfo::StaticData, TOTAL_SPELL_TARGETS> SpellImplicitTargetInfo::_data =
|
||||
{ {
|
||||
{TARGET_OBJECT_TYPE_NONE, TARGET_REFERENCE_TYPE_NONE, TARGET_SELECT_CATEGORY_NYI, TARGET_CHECK_DEFAULT, TARGET_DIR_NONE}, //
|
||||
{TARGET_OBJECT_TYPE_UNIT, TARGET_REFERENCE_TYPE_CASTER, TARGET_SELECT_CATEGORY_DEFAULT, TARGET_CHECK_DEFAULT, TARGET_DIR_NONE}, // 1 TARGET_UNIT_CASTER
|
||||
{TARGET_OBJECT_TYPE_UNIT, TARGET_REFERENCE_TYPE_CASTER, TARGET_SELECT_CATEGORY_NEARBY, TARGET_CHECK_ENEMY, TARGET_DIR_NONE}, // 2 TARGET_UNIT_NEARBY_ENEMY
|
||||
@@ -324,7 +324,7 @@ SpellImplicitTargetInfo::StaticData SpellImplicitTargetInfo::_data[TOTAL_SPELL_T
|
||||
{TARGET_OBJECT_TYPE_GOBJ, TARGET_REFERENCE_TYPE_CASTER, TARGET_SELECT_CATEGORY_CONE, TARGET_CHECK_DEFAULT, TARGET_DIR_FRONT}, // 108 TARGET_GAMEOBJECT_CONE
|
||||
{TARGET_OBJECT_TYPE_NONE, TARGET_REFERENCE_TYPE_NONE, TARGET_SELECT_CATEGORY_NYI, TARGET_CHECK_DEFAULT, TARGET_DIR_NONE}, // 109
|
||||
{TARGET_OBJECT_TYPE_DEST, TARGET_REFERENCE_TYPE_NONE, TARGET_SELECT_CATEGORY_NYI, TARGET_CHECK_ENTRY, TARGET_DIR_NONE}, // 110 TARGET_UNIT_CONE_ENTRY_110
|
||||
};
|
||||
} };
|
||||
|
||||
SpellEffectInfo::SpellEffectInfo(SpellEntry const* spellEntry, SpellInfo const* spellInfo, uint8 effIndex)
|
||||
{
|
||||
@@ -595,8 +595,8 @@ SpellTargetObjectTypes SpellEffectInfo::GetUsedTargetObjectType() const
|
||||
return _data[Effect].UsedTargetObjectType;
|
||||
}
|
||||
|
||||
SpellEffectInfo::StaticData SpellEffectInfo::_data[TOTAL_SPELL_EFFECTS] =
|
||||
{
|
||||
std::array<SpellEffectInfo::StaticData, TOTAL_SPELL_EFFECTS> SpellEffectInfo::_data =
|
||||
{ {
|
||||
// implicit target type used target object type
|
||||
{EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 0
|
||||
{EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_UNIT}, // 1 SPELL_EFFECT_INSTAKILL
|
||||
@@ -763,7 +763,7 @@ SpellEffectInfo::StaticData SpellEffectInfo::_data[TOTAL_SPELL_EFFECTS] =
|
||||
{EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_UNIT}, // 162 SPELL_EFFECT_TALENT_SPEC_SELECT
|
||||
{EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_UNIT}, // 163 SPELL_EFFECT_163
|
||||
{EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_UNIT}, // 164 SPELL_EFFECT_REMOVE_AURA
|
||||
};
|
||||
} };
|
||||
|
||||
SpellInfo::SpellInfo(SpellEntry const* spellEntry)
|
||||
{
|
||||
@@ -819,33 +819,19 @@ SpellInfo::SpellInfo(SpellEntry const* spellEntry)
|
||||
RangeEntry = spellEntry->RangeIndex ? sSpellRangeStore.LookupEntry(spellEntry->RangeIndex) : nullptr;
|
||||
Speed = spellEntry->Speed;
|
||||
StackAmount = spellEntry->CumulativeAura;
|
||||
for (uint8 i = 0; i < 2; ++i)
|
||||
Totem[i] = spellEntry->Totem[i];
|
||||
|
||||
for (uint8 i = 0; i < MAX_SPELL_REAGENTS; ++i)
|
||||
Reagent[i] = spellEntry->Reagent[i];
|
||||
|
||||
for (uint8 i = 0; i < MAX_SPELL_REAGENTS; ++i)
|
||||
ReagentCount[i] = spellEntry->ReagentCount[i];
|
||||
|
||||
Totem = spellEntry->Totem;
|
||||
Reagent = spellEntry->Reagent;
|
||||
ReagentCount = spellEntry->ReagentCount;
|
||||
EquippedItemClass = spellEntry->EquippedItemClass;
|
||||
EquippedItemSubClassMask = spellEntry->EquippedItemSubclass;
|
||||
EquippedItemInventoryTypeMask = spellEntry->EquippedItemInvTypes;
|
||||
for (uint8 i = 0; i < 2; ++i)
|
||||
TotemCategory[i] = spellEntry->RequiredTotemCategoryID[i];
|
||||
|
||||
for (uint8 i = 0; i < 2; ++i)
|
||||
SpellVisual[i] = spellEntry->SpellVisualID[i];
|
||||
|
||||
TotemCategory = spellEntry->RequiredTotemCategoryID;
|
||||
SpellVisual = spellEntry->SpellVisualID;
|
||||
SpellIconID = spellEntry->SpellIconID;
|
||||
ActiveIconID = spellEntry->ActiveIconID;
|
||||
Priority = spellEntry->SpellPriority;
|
||||
for (uint8 i = 0; i < 16; ++i)
|
||||
SpellName[i] = spellEntry->Name[i];
|
||||
|
||||
for (uint8 i = 0; i < 16; ++i)
|
||||
Rank[i] = spellEntry->NameSubtext[i];
|
||||
|
||||
SpellName = spellEntry->Name;
|
||||
Rank = spellEntry->NameSubtext;
|
||||
MaxTargetLevel = spellEntry->MaxTargetLevel;
|
||||
MaxAffectedTargets = spellEntry->MaxTargets;
|
||||
SpellFamilyName = spellEntry->SpellClassSet;
|
||||
@@ -2856,9 +2842,9 @@ void SpellInfo::_LoadImmunityInfo()
|
||||
|
||||
void SpellInfo::ApplyAllSpellImmunitiesTo(Unit* target, uint8 effIndex, bool apply) const
|
||||
{
|
||||
ImmunityInfo const* immuneInfo = _immunityInfo + effIndex;
|
||||
ImmunityInfo const& immuneInfo = _immunityInfo[effIndex];
|
||||
|
||||
if (uint32 schoolImmunity = immuneInfo->SchoolImmuneMask)
|
||||
if (uint32 schoolImmunity = immuneInfo.SchoolImmuneMask)
|
||||
{
|
||||
target->ApplySpellImmune(Id, IMMUNITY_SCHOOL, schoolImmunity, apply);
|
||||
|
||||
@@ -2876,7 +2862,7 @@ void SpellInfo::ApplyAllSpellImmunitiesTo(Unit* target, uint8 effIndex, bool app
|
||||
}
|
||||
}
|
||||
|
||||
if (uint32 mechanicImmunity = immuneInfo->MechanicImmuneMask)
|
||||
if (uint32 mechanicImmunity = immuneInfo.MechanicImmuneMask)
|
||||
{
|
||||
for (uint32 i = 0; i < MAX_MECHANIC; ++i)
|
||||
if (mechanicImmunity & (1 << i))
|
||||
@@ -2886,7 +2872,7 @@ void SpellInfo::ApplyAllSpellImmunitiesTo(Unit* target, uint8 effIndex, bool app
|
||||
target->RemoveAurasWithMechanic(mechanicImmunity, AURA_REMOVE_BY_DEFAULT, Id);
|
||||
}
|
||||
|
||||
if (uint32 dispelImmunity = immuneInfo->DispelImmune)
|
||||
if (uint32 dispelImmunity = immuneInfo.DispelImmune)
|
||||
{
|
||||
target->ApplySpellImmune(Id, IMMUNITY_DISPEL, dispelImmunity, apply);
|
||||
|
||||
@@ -2903,17 +2889,17 @@ void SpellInfo::ApplyAllSpellImmunitiesTo(Unit* target, uint8 effIndex, bool app
|
||||
}
|
||||
}
|
||||
|
||||
if (uint32 damageImmunity = immuneInfo->DamageSchoolMask)
|
||||
if (uint32 damageImmunity = immuneInfo.DamageSchoolMask)
|
||||
target->ApplySpellImmune(Id, IMMUNITY_DAMAGE, damageImmunity, apply);
|
||||
|
||||
for (AuraType auraType : immuneInfo->AuraTypeImmune)
|
||||
for (AuraType auraType : immuneInfo.AuraTypeImmune)
|
||||
{
|
||||
target->ApplySpellImmune(Id, IMMUNITY_STATE, auraType, apply);
|
||||
if (apply && HasAttribute(SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY))
|
||||
target->RemoveAurasByType(auraType);
|
||||
}
|
||||
|
||||
for (SpellEffects effectType : immuneInfo->SpellEffectImmune)
|
||||
for (SpellEffects effectType : immuneInfo.SpellEffectImmune)
|
||||
target->ApplySpellImmune(Id, IMMUNITY_EFFECT, effectType, apply);
|
||||
}
|
||||
|
||||
@@ -2922,22 +2908,20 @@ bool SpellInfo::CanSpellProvideImmunityAgainstAura(SpellInfo const* auraSpellInf
|
||||
if (!auraSpellInfo)
|
||||
return false;
|
||||
|
||||
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
|
||||
for (ImmunityInfo const& immuneInfo : _immunityInfo)
|
||||
{
|
||||
ImmunityInfo const* immuneInfo = _immunityInfo + i;
|
||||
|
||||
if (!auraSpellInfo->HasAttribute(SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE) && !auraSpellInfo->HasAttribute(SPELL_ATTR2_UNAFFECTED_BY_AURA_SCHOOL_IMMUNE))
|
||||
{
|
||||
if (uint32 schoolImmunity = immuneInfo->SchoolImmuneMask)
|
||||
if (uint32 schoolImmunity = immuneInfo.SchoolImmuneMask)
|
||||
if ((auraSpellInfo->SchoolMask & schoolImmunity) != 0)
|
||||
return true;
|
||||
}
|
||||
|
||||
if (uint32 mechanicImmunity = immuneInfo->MechanicImmuneMask)
|
||||
if (uint32 mechanicImmunity = immuneInfo.MechanicImmuneMask)
|
||||
if ((mechanicImmunity & (1 << auraSpellInfo->Mechanic)) != 0)
|
||||
return true;
|
||||
|
||||
if (uint32 dispelImmunity = immuneInfo->DispelImmune)
|
||||
if (uint32 dispelImmunity = immuneInfo.DispelImmune)
|
||||
if (auraSpellInfo->Dispel == dispelImmunity)
|
||||
return true;
|
||||
|
||||
@@ -2948,8 +2932,8 @@ bool SpellInfo::CanSpellProvideImmunityAgainstAura(SpellInfo const* auraSpellInf
|
||||
if (!effectName)
|
||||
continue;
|
||||
|
||||
auto spellImmuneItr = immuneInfo->SpellEffectImmune.find(static_cast<SpellEffects>(effectName));
|
||||
if (spellImmuneItr == immuneInfo->SpellEffectImmune.cend())
|
||||
auto spellImmuneItr = immuneInfo.SpellEffectImmune.find(static_cast<SpellEffects>(effectName));
|
||||
if (spellImmuneItr == immuneInfo.SpellEffectImmune.cend())
|
||||
{
|
||||
immuneToAllEffects = false;
|
||||
break;
|
||||
@@ -2957,7 +2941,7 @@ bool SpellInfo::CanSpellProvideImmunityAgainstAura(SpellInfo const* auraSpellInf
|
||||
|
||||
if (uint32 mechanic = auraSpellInfo->Effects[effIndex].Mechanic)
|
||||
{
|
||||
if (!(immuneInfo->MechanicImmuneMask & (1 << mechanic)))
|
||||
if (!(immuneInfo.MechanicImmuneMask & (1 << mechanic)))
|
||||
{
|
||||
immuneToAllEffects = false;
|
||||
break;
|
||||
@@ -2969,13 +2953,13 @@ bool SpellInfo::CanSpellProvideImmunityAgainstAura(SpellInfo const* auraSpellInf
|
||||
if (uint32 auraName = auraSpellInfo->Effects[effIndex].ApplyAuraName)
|
||||
{
|
||||
bool isImmuneToAuraEffectApply = false;
|
||||
auto auraImmuneItr = immuneInfo->AuraTypeImmune.find(static_cast<AuraType>(auraName));
|
||||
if (auraImmuneItr != immuneInfo->AuraTypeImmune.cend())
|
||||
auto auraImmuneItr = immuneInfo.AuraTypeImmune.find(static_cast<AuraType>(auraName));
|
||||
if (auraImmuneItr != immuneInfo.AuraTypeImmune.cend())
|
||||
isImmuneToAuraEffectApply = true;
|
||||
|
||||
if (!isImmuneToAuraEffectApply && !auraSpellInfo->IsPositiveEffect(effIndex) && !auraSpellInfo->HasAttribute(SPELL_ATTR2_UNAFFECTED_BY_AURA_SCHOOL_IMMUNE))
|
||||
{
|
||||
if (uint32 applyHarmfulAuraImmunityMask = immuneInfo->ApplyHarmfulAuraImmuneMask)
|
||||
if (uint32 applyHarmfulAuraImmunityMask = immuneInfo.ApplyHarmfulAuraImmuneMask)
|
||||
if ((auraSpellInfo->GetSchoolMask() & applyHarmfulAuraImmunityMask) != 0)
|
||||
isImmuneToAuraEffectApply = true;
|
||||
}
|
||||
|
||||
@@ -232,7 +232,7 @@ private:
|
||||
SpellTargetCheckTypes SelectionCheckType; // defines selection criteria
|
||||
SpellTargetDirectionTypes DirectionType; // direction for cone and dest targets
|
||||
};
|
||||
static StaticData _data[TOTAL_SPELL_TARGETS];
|
||||
static std::array<StaticData, TOTAL_SPELL_TARGETS> _data;
|
||||
};
|
||||
|
||||
class TC_GAME_API SpellEffectInfo
|
||||
@@ -296,7 +296,7 @@ private:
|
||||
SpellEffectImplicitTargetTypes ImplicitTargetType; // defines what target can be added to effect target list if there's no valid target type provided for effect
|
||||
SpellTargetObjectTypes UsedTargetObjectType; // defines valid target object type for spell effect
|
||||
};
|
||||
static StaticData _data[TOTAL_SPELL_EFFECTS];
|
||||
static std::array<StaticData, TOTAL_SPELL_EFFECTS> _data;
|
||||
};
|
||||
|
||||
struct TC_GAME_API SpellDiminishInfo
|
||||
@@ -376,19 +376,19 @@ class TC_GAME_API SpellInfo
|
||||
SpellRangeEntry const* RangeEntry;
|
||||
float Speed;
|
||||
uint32 StackAmount;
|
||||
uint32 Totem[2];
|
||||
int32 Reagent[MAX_SPELL_REAGENTS];
|
||||
uint32 ReagentCount[MAX_SPELL_REAGENTS];
|
||||
std::array<uint32, 2> Totem;
|
||||
std::array<int32, MAX_SPELL_REAGENTS> Reagent;
|
||||
std::array<uint32, MAX_SPELL_REAGENTS> ReagentCount;
|
||||
int32 EquippedItemClass;
|
||||
int32 EquippedItemSubClassMask;
|
||||
int32 EquippedItemInventoryTypeMask;
|
||||
uint32 TotemCategory[2];
|
||||
uint32 SpellVisual[2];
|
||||
std::array<uint32, 2> TotemCategory;
|
||||
std::array<uint32, 2> SpellVisual;
|
||||
uint32 SpellIconID;
|
||||
uint32 ActiveIconID;
|
||||
uint32 Priority;
|
||||
char* SpellName[16];
|
||||
char* Rank[16];
|
||||
std::array<char const*, 16> SpellName;
|
||||
std::array<char const*, 16> Rank;
|
||||
uint32 MaxTargetLevel;
|
||||
uint32 MaxAffectedTargets;
|
||||
uint32 SpellFamilyName;
|
||||
@@ -397,7 +397,7 @@ class TC_GAME_API SpellInfo
|
||||
uint32 PreventionType;
|
||||
int32 AreaGroupId;
|
||||
uint32 SchoolMask;
|
||||
SpellEffectInfo Effects[MAX_SPELL_EFFECTS];
|
||||
std::array<SpellEffectInfo, MAX_SPELL_EFFECTS> Effects;
|
||||
uint32 ExplicitTargetMask;
|
||||
SpellChainNode const* ChainEntry;
|
||||
|
||||
@@ -552,7 +552,7 @@ class TC_GAME_API SpellInfo
|
||||
|
||||
uint32 _allowedMechanicMask;
|
||||
|
||||
ImmunityInfo _immunityInfo[MAX_SPELL_EFFECTS];
|
||||
std::array<ImmunityInfo, MAX_SPELL_EFFECTS> _immunityInfo;
|
||||
};
|
||||
|
||||
#endif // _SPELLINFO_H
|
||||
|
||||
@@ -98,6 +98,8 @@ class DBCStorage : public DBCStorageBase
|
||||
|
||||
DBCStorage(DBCStorage const& right) = delete;
|
||||
DBCStorage& operator=(DBCStorage const& right) = delete;
|
||||
|
||||
friend class UnitTestDataLoader;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -34,16 +34,16 @@ struct AchievementEntry
|
||||
int32 Faction; // 1 -1=all, 0=horde, 1=alliance
|
||||
int32 InstanceID; // 2 -1=none
|
||||
//uint32 Supercedes; // 3 its Achievement parent (can`t start while parent uncomplete, use its Criteria if don`t have own, use its progress on begin)
|
||||
char* Title[16]; // 4-19
|
||||
std::array<char const*, 16> Title; // 4-19
|
||||
//uint32 Title_lang_mask; // 20
|
||||
//char* Description[16]; // 21-36
|
||||
//char const* Description[16]; // 21-36
|
||||
//uint32 Description_lang_mask; // 37
|
||||
uint32 Category; // 38
|
||||
uint32 Points; // 39 reward points
|
||||
//uint32 UiOrder; // 40 icon (from SpellIcon.dbc)
|
||||
uint32 Flags; // 41
|
||||
//uint32 IconID; // 42
|
||||
//char* Reward[16]; // 43-58
|
||||
//char const* Reward[16]; // 43-58
|
||||
//uint32 Reward_lang_mask; // 59
|
||||
uint32 MinimumCriteria; // 60 - need this count of completed criterias (own or referenced achievement criterias)
|
||||
uint32 SharesCriteria; // 61 - referenced achievement (counting of all completed criterias)
|
||||
@@ -164,7 +164,7 @@ struct AchievementCriteriaEntry
|
||||
uint32 Asset;
|
||||
} AdditionalRequirements[MAX_CRITERIA_REQUIREMENTS]; // 5-8
|
||||
|
||||
//char* Description[16]; // 9-24
|
||||
//char const* Description[16]; // 9-24
|
||||
//uint32 Description_lang_mask; // 25
|
||||
uint32 Flags; // 26
|
||||
uint32 StartEvent; // 27 AchievementCriteriaTimedTypes
|
||||
@@ -186,7 +186,7 @@ struct AreaTableEntry
|
||||
//uint32 ZoneMusic; // 8
|
||||
//uint32 IntroSound; // 9
|
||||
int32 ExplorationLevel; // 10
|
||||
char* AreaName[16]; // 11-26
|
||||
char const* AreaName[16]; // 11-26
|
||||
//uint32 AreaName_lang_mask; // 27
|
||||
uint32 FactionGroupMask; // 28
|
||||
uint32 LiquidTypeID[4]; // 29-32 liquid override by type
|
||||
@@ -233,9 +233,9 @@ struct AreaPOIEntry
|
||||
uint32 ContinentID; // 15
|
||||
//uint32 Flags; // 16
|
||||
uint32 AreaID; // 17
|
||||
//char* Name[16]; // 18-33
|
||||
//char const* Name[16]; // 18-33
|
||||
//uint32 Name_lang_mask; // 34
|
||||
//char* Description[16]; // 35-50
|
||||
//char const* Description[16]; // 35-50
|
||||
//uint32 Description_lang_mask; // 51
|
||||
uint32 WorldStateID; // 52
|
||||
//uint32 WorldMapLink; // 53
|
||||
@@ -259,7 +259,7 @@ struct AuctionHouseEntry
|
||||
uint32 FactionID; // 1 id of faction.dbc for player factions associated with city
|
||||
uint32 DepositRate; // 2 1/3 from real
|
||||
uint32 ConsignmentRate; // 3
|
||||
//char* Name[16]; // 4-19
|
||||
//char const* Name[16]; // 4-19
|
||||
//uint32 Name_lang_mask; // 20
|
||||
};
|
||||
|
||||
@@ -282,7 +282,7 @@ struct BarberShopStyleEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
uint32 Type; // 1 value 0 -> hair, value 2 -> facialhair
|
||||
//char* DisplayName[16]; // 2-17
|
||||
//char const* DisplayName[16]; // 2-17
|
||||
//uint32 DisplayName_lang_mask; // 18
|
||||
//uint32 Description[16]; // 19-34, all empty
|
||||
//uint32 Description_lang_mask; // 35
|
||||
@@ -298,7 +298,7 @@ struct BattlemasterListEntry
|
||||
int32 MapID[8]; // 1-8
|
||||
uint32 InstanceType; // 9 map type (3 - BG, 4 - arena)
|
||||
//uint32 GroupsAllowed; // 10
|
||||
char* Name[16]; // 11-26
|
||||
char const* Name[16]; // 11-26
|
||||
//uint32 Name_lang_mask; // 27
|
||||
uint32 MaxGroupSize; // 28 used for checking if queue as group
|
||||
uint32 HolidayWorldState; // 29
|
||||
@@ -335,7 +335,7 @@ struct CharSectionsEntry
|
||||
uint32 RaceID; // 1
|
||||
uint32 SexID; // 2
|
||||
uint32 BaseSection; // 3
|
||||
//char* TextureName[3]; // 4-6
|
||||
//char const* TextureName[3]; // 4-6
|
||||
uint32 Flags; // 7
|
||||
uint32 VariationIndex; // 8
|
||||
uint32 ColorIndex; // 9
|
||||
@@ -361,9 +361,9 @@ struct CharTitlesEntry
|
||||
{
|
||||
uint32 ID; // 0, title ids, for example in Quest::GetCharTitleId()
|
||||
//uint32 ConditionID; // 1
|
||||
char* Name[16]; // 2-17 male
|
||||
char const* Name[16]; // 2-17 male
|
||||
//uint32 Name_lang_mask; // 18
|
||||
char* Name1[16]; // 19-34 female
|
||||
char const* Name1[16]; // 19-34 female
|
||||
//uint32 Name1_lang_mask; // 35
|
||||
uint32 MaskID; // 36 used in PLAYER_CHOSEN_TITLE and 1<<index in PLAYER__FIELD_KNOWN_TITLES
|
||||
};
|
||||
@@ -373,9 +373,9 @@ struct ChatChannelsEntry
|
||||
uint32 ID; // 0
|
||||
uint32 Flags; // 1
|
||||
//uint32 FactionGroup; // 2
|
||||
char* Name[16]; // 3-18
|
||||
char const* Name[16]; // 3-18
|
||||
//uint32 Name_lang_mask; // 19
|
||||
//char* Shortcut[16]; // 20-35
|
||||
//char const* Shortcut[16]; // 20-35
|
||||
//uint32 Shortcut_lang_mask; // 36
|
||||
};
|
||||
|
||||
@@ -384,14 +384,14 @@ struct ChrClassesEntry
|
||||
uint32 ID; // 0
|
||||
//uint32 DamageBonusStat; // 1
|
||||
uint32 DisplayPower; // 2
|
||||
//char* PetNameToken; // 3
|
||||
char* Name[16]; // 4-19
|
||||
//char const* PetNameToken; // 3
|
||||
char const* Name[16]; // 4-19
|
||||
//uint32 Name_lang_mask; // 20
|
||||
//char* NameFemale[16]; // 21-36
|
||||
//char const* NameFemale[16]; // 21-36
|
||||
//uint32 NameFemale_lang_mask; // 37
|
||||
//char* NameMale[16]; // 38-53
|
||||
//char const* NameMale[16]; // 38-53
|
||||
//uint32 NameMale_lang_mask; // 54
|
||||
//char* Filename; // 55
|
||||
//char const* Filename; // 55
|
||||
uint32 SpellClassSet; // 56
|
||||
//uint32 Flags; // 57
|
||||
uint32 CinematicSequenceID; // 58 ID from CinematicSequences.dbc
|
||||
@@ -420,22 +420,22 @@ struct ChrRacesEntry
|
||||
//uint32 ExplorationSoundID; // 3
|
||||
uint32 MaleDisplayID; // 4
|
||||
uint32 FemaleDisplayID; // 5
|
||||
//char* ClientPrefix; // 6
|
||||
//char const* ClientPrefix; // 6
|
||||
uint32 BaseLanguage; // 7 (7-Alliance 1-Horde)
|
||||
uint32 CreatureType; // 8
|
||||
uint32 ResSicknessSpellID; // 9
|
||||
//uint32 SplashSoundID; // 10
|
||||
//char* ClientFileString; // 11
|
||||
//char const* ClientFileString; // 11
|
||||
uint32 CinematicSequenceID; // 12 ID from CinematicSequences.dbc
|
||||
uint32 Alliance; // 13
|
||||
char* Name[16]; // 14-29
|
||||
char const* Name[16]; // 14-29
|
||||
//uint32 Name_lang_mask; // 30
|
||||
//char* NameFemale[16]; // 31-46
|
||||
//char const* NameFemale[16]; // 31-46
|
||||
//uint32 NameFemale_lang_mask; // 47
|
||||
//char* NameMale[16]; // 48-63
|
||||
//char const* NameMale[16]; // 48-63
|
||||
//uint32 NameMale_lang_mask; // 64
|
||||
//char* FacialHairCustomization[2]; // 65-66
|
||||
//char* HairCustomization; // 67
|
||||
//char const* FacialHairCustomization[2]; // 65-66
|
||||
//char const* HairCustomization; // 67
|
||||
uint32 RequiredExpansion; // 68
|
||||
|
||||
inline bool HasFlag(ChrRacesFlags flag) const { return (Flags & flag) != 0; }
|
||||
@@ -444,7 +444,7 @@ struct ChrRacesEntry
|
||||
struct CinematicCameraEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
char* Model; // 1 Model filename (translate .mdx to .m2)
|
||||
char const* Model; // 1 Model filename (translate .mdx to .m2)
|
||||
uint32 SoundID; // 2 Sound ID (voiceover for cinematic)
|
||||
DBCPosition3D Origin; // 3-5 Position in map used for basis for M2 co-ordinates
|
||||
float OriginFacing; // 6 Orientation in map used for basis for M2 co-ordinates
|
||||
@@ -465,8 +465,8 @@ struct CreatureDisplayInfoEntry
|
||||
uint32 ExtendedDisplayInfoID; // 3
|
||||
float CreatureModelScale; // 4
|
||||
//uint32 CreatureModelAlpha; // 5
|
||||
//char* TextureVariation[3]; // 6-8
|
||||
//char* PortraitTextureName; // 9
|
||||
//char const* TextureVariation[3]; // 6-8
|
||||
//char const* PortraitTextureName; // 9
|
||||
//uint32 SizeClass; // 10
|
||||
//uint32 BloodID; // 11
|
||||
//uint32 NPCSoundID; // 12
|
||||
@@ -487,7 +487,7 @@ struct CreatureDisplayInfoExtraEntry
|
||||
//uint32 FacialHairID; // 7
|
||||
//uint32 NPCItemDisplay[11]; // 8-18
|
||||
//uint32 Flags; // 19
|
||||
//char* BakeName; // 20
|
||||
//char const* BakeName; // 20
|
||||
};
|
||||
|
||||
struct CreatureFamilyEntry
|
||||
@@ -501,9 +501,9 @@ struct CreatureFamilyEntry
|
||||
uint32 PetFoodMask; // 7
|
||||
int32 PetTalentType; // 8
|
||||
//int32 CategoryEnumID; // 9
|
||||
char* Name[16]; // 10-25
|
||||
char const* Name[16]; // 10-25
|
||||
//uint32 Name_lang_mask; // 26
|
||||
//char* IconFile; // 27
|
||||
//char const* IconFile; // 27
|
||||
};
|
||||
|
||||
enum CreatureModelDataFlags
|
||||
@@ -515,7 +515,7 @@ struct CreatureModelDataEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
uint32 Flags; // 1
|
||||
char* ModelName; // 2
|
||||
char const* ModelName; // 2
|
||||
//uint32 SizeClass; // 3
|
||||
float ModelScale; // 4 Used in calculation of unit collision data
|
||||
//int32 BloodID; // 5
|
||||
@@ -556,7 +556,7 @@ enum CreatureTypeEntryFlags
|
||||
struct CreatureTypeEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
//char* Name[16]; // 1-16
|
||||
//char const* Name[16]; // 1-16
|
||||
//uint32 Name_lang_mask; // 17
|
||||
//uint32 Flags; // 18
|
||||
};
|
||||
@@ -566,7 +566,7 @@ struct CurrencyCategoryEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
uint32 Flags; // 1
|
||||
char* Name[16]; // 2-17
|
||||
char const* Name[16]; // 2-17
|
||||
uint32 Name_lang_mask; // 18
|
||||
};
|
||||
*/
|
||||
@@ -609,7 +609,7 @@ struct DungeonEncounterEntry
|
||||
uint32 Difficulty; // 2
|
||||
//uint32 OrderIndex; // 3
|
||||
uint32 Bit; // 4 encounter index for creating completed mask
|
||||
char* Name[16]; // 5-20
|
||||
char const* Name[16]; // 5-20
|
||||
//uint32 Name_lang_mask; // 21
|
||||
//uint32 SpellIconID; // 22
|
||||
};
|
||||
@@ -630,7 +630,7 @@ struct DurabilityQualityEntry
|
||||
struct EmotesEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
//char* EmoteSlashCommand; // 1 internal name
|
||||
//char const* EmoteSlashCommand; // 1 internal name
|
||||
//uint32 AnimID; // 2 ref to animationData
|
||||
uint32 EmoteFlags; // 3 bitmask, may be unit_flags
|
||||
uint32 EmoteSpecProc; // 4 Can be 0, 1 or 2 (determine how emote are shown)
|
||||
@@ -641,7 +641,7 @@ struct EmotesEntry
|
||||
struct EmotesTextEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
//char* Name; // 1
|
||||
//char const* Name; // 1
|
||||
uint32 EmoteID; // 2
|
||||
//uint32 EmoteText[16]; // 3-18
|
||||
};
|
||||
@@ -668,9 +668,9 @@ struct FactionEntry
|
||||
// [1] Faction outputs rep * spilloverRateOut as spillover reputation
|
||||
uint32 ParentFactionCap[2]; // 21-22 [0] The highest rank the faction will profit from incoming spillover
|
||||
// [1] It does not seem to be the max standing at which a faction outputs spillover ...so no idea
|
||||
char* Name[16]; // 23-38
|
||||
char const* Name[16]; // 23-38
|
||||
//uint32 Name_lang_mask; // 39
|
||||
//char* Description[16]; // 40-55
|
||||
//char const* Description[16]; // 40-55
|
||||
//uint32 Description_lang_mask; // 56
|
||||
|
||||
// helpers
|
||||
@@ -734,14 +734,14 @@ struct FactionTemplateEntry
|
||||
struct GameObjectArtKitEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
//char* TextureVariation[3] // 1-3 m_textureVariations[3]
|
||||
//char* AttachModel[4] // 4-8 m_attachModels[4]
|
||||
//char const* TextureVariation[3] // 1-3 m_textureVariations[3]
|
||||
//char const* AttachModel[4] // 4-8 m_attachModels[4]
|
||||
};
|
||||
|
||||
struct GameObjectDisplayInfoEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
char* ModelName; // 1
|
||||
char const* ModelName; // 1
|
||||
//uint32 Sound[10]; // 2-11
|
||||
DBCPosition3D GeoBoxMin; // 12-14
|
||||
DBCPosition3D GeoBoxMax; // 15-17
|
||||
@@ -843,7 +843,7 @@ struct GtRegenMPPerSptEntry
|
||||
struct HolidayDescriptionsEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
char* Description[16]; // 1-16
|
||||
char const* Description[16]; // 1-16
|
||||
uint32 Description_lang_mask; // 17
|
||||
};
|
||||
*/
|
||||
@@ -852,7 +852,7 @@ struct HolidayDescriptionsEntry
|
||||
struct HolidayNamesEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
char* Name[16]; // 1-16
|
||||
char const* Name[16]; // 1-16
|
||||
uint32 Name_lang_mask; // 17
|
||||
};
|
||||
*/
|
||||
@@ -871,7 +871,7 @@ struct HolidaysEntry
|
||||
uint32 CalendarFlags[MAX_HOLIDAY_FLAGS]; // 39-48
|
||||
//uint32 HolidayNameID; // 49 HolidayNames.dbc
|
||||
//uint32 HolidayDescriptionID; // 50 HolidayDescriptions.dbc
|
||||
char* TextureFilename; // 51
|
||||
char const* TextureFilename; // 51
|
||||
uint32 Priority; // 52
|
||||
int32 CalendarFilterType; // 53
|
||||
//uint32 Flags; // 54 0 = Darkmoon Faire, Fishing Contest and Wotlk Launch, rest is 1
|
||||
@@ -892,7 +892,7 @@ struct ItemEntry
|
||||
struct ItemBagFamilyEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
//char* Name[16]; // 1-16
|
||||
//char const* Name[16]; // 1-16
|
||||
//uint32 Name_lang_mask; // 17
|
||||
};
|
||||
|
||||
@@ -900,15 +900,15 @@ struct ItemBagFamilyEntry
|
||||
struct ItemDisplayInfoEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
char* ModelName[2]; // 1-2
|
||||
char* ModelTexture[2]; // 3-4
|
||||
char* InventoryIcon[2]; // 5-6
|
||||
char const* ModelName[2]; // 1-2
|
||||
char const* ModelTexture[2]; // 3-4
|
||||
char const* InventoryIcon[2]; // 5-6
|
||||
uint32 GeosetGroup[3]; // 7-9
|
||||
uint32 Flags; // 10
|
||||
uint32 SpellVisualID; // 11
|
||||
uint32 GroupSoundIndex; // 12
|
||||
uint32 HelmetGeosetVisID[2]; // 13-14
|
||||
char* Texture[8]; // 15-22
|
||||
char const* Texture[8]; // 15-22
|
||||
int32 ItemVisual; // 23
|
||||
uint32 ParticleColorID; // 24
|
||||
};
|
||||
@@ -941,7 +941,7 @@ struct ItemExtendedCostEntry
|
||||
struct ItemLimitCategoryEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
//char* Name[16] // 1-16
|
||||
//char const* Name[16] // 1-16
|
||||
//uint32 Name_lang_mask; // 17
|
||||
uint32 Quantity; // 18 max allowed equipped as item or in gem slot
|
||||
uint32 Flags; // 19 enum ItemLimitCategoryMode
|
||||
@@ -952,19 +952,19 @@ struct ItemLimitCategoryEntry
|
||||
struct ItemRandomPropertiesEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
//char* InternalName; // 1
|
||||
//char const* InternalName; // 1
|
||||
uint32 Enchantment[MAX_ITEM_ENCHANTMENT_EFFECTS]; // 2-4
|
||||
//uint32 UnusedEnchantment[2]; // 5-6
|
||||
char* Name[16]; // 7-22
|
||||
char const* Name[16]; // 7-22
|
||||
//uint32 Name_lang_mask; // 23
|
||||
};
|
||||
|
||||
struct ItemRandomSuffixEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
char* Name[16]; // 1-16
|
||||
char const* Name[16]; // 1-16
|
||||
//uint32 Name_lang_mask; // 17
|
||||
//char* InternalName; // 18
|
||||
//char const* InternalName; // 18
|
||||
uint32 Enchantment[MAX_ITEM_ENCHANTMENT_EFFECTS]; // 19-21
|
||||
//uint32 UnusedEnchantment[2] // 22-23
|
||||
uint32 AllocationPct[MAX_ITEM_ENCHANTMENT_EFFECTS]; // 24-26
|
||||
@@ -977,7 +977,7 @@ struct ItemRandomSuffixEntry
|
||||
struct ItemSetEntry
|
||||
{
|
||||
//uint32 ID; // 0
|
||||
char* Name[16]; // 1-16
|
||||
char const* Name[16]; // 1-16
|
||||
//uint32 Name_lang_mask; // 17
|
||||
uint32 ItemID[MAX_ITEM_SET_ITEMS]; // 18-27
|
||||
//uint32 UnusedItemID[7]; // 28-34
|
||||
@@ -990,7 +990,7 @@ struct ItemSetEntry
|
||||
struct LFGDungeonEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
char* Name[16]; // 1-16
|
||||
char const* Name[16]; // 1-16
|
||||
//uint32 Name_lang_mask; // 17
|
||||
uint32 MinLevel; // 18
|
||||
uint32 MaxLevel; // 19
|
||||
@@ -1002,11 +1002,11 @@ struct LFGDungeonEntry
|
||||
uint32 Flags; // 25
|
||||
uint32 TypeID; // 26
|
||||
//int32 Faction; // 27
|
||||
//char* TextureFilename; // 28
|
||||
//char const* TextureFilename; // 28
|
||||
uint32 ExpansionLevel; // 29
|
||||
//uint32 OrderIndex; // 30
|
||||
uint32 GroupID; // 31
|
||||
//char* Description[16]; // 32-47
|
||||
//char const* Description[16]; // 32-47
|
||||
//uint32 Description_lang_mask; // 48
|
||||
|
||||
// Helpers
|
||||
@@ -1026,7 +1026,7 @@ struct LightEntry
|
||||
struct LiquidTypeEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
//char* Name; // 1
|
||||
//char const* Name; // 1
|
||||
//uint32 Flags; // 2
|
||||
uint32 SoundBank; // 3
|
||||
//uint32 SoundID; // 4
|
||||
@@ -1040,7 +1040,7 @@ struct LiquidTypeEntry
|
||||
//uint32 ParticleMovement; // 12
|
||||
//uint32 ParticleTexSlots; // 13
|
||||
//uint32 MaterialID; // 14
|
||||
//char* Texture[6]; // 15-20
|
||||
//char const* Texture[6]; // 15-20
|
||||
//uint32 Color[2]; // 21-22
|
||||
//float Unk1[18]; // 23-40
|
||||
//uint32 Unk2[4]; // 41-44
|
||||
@@ -1060,25 +1060,25 @@ struct LockEntry
|
||||
struct MailTemplateEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
//char* Subject[16]; // 1-16
|
||||
//char const* Subject[16]; // 1-16
|
||||
//uint32 Subject_lang_mask; // 17
|
||||
char* Body[16]; // 18-33
|
||||
char const* Body[16]; // 18-33
|
||||
//uint32 Body_lang_mask; // 34
|
||||
};
|
||||
|
||||
struct MapEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
//char* Directory; // 1
|
||||
//char const* Directory; // 1
|
||||
uint32 InstanceType; // 2
|
||||
uint32 Flags; // 3
|
||||
//uint32 MapType; // 4 0 or 1 for battlegrounds (not arenas)
|
||||
char* MapName[16]; // 5-20
|
||||
char const* MapName[16]; // 5-20
|
||||
//uint32 MapName_lang_mask; // 21
|
||||
uint32 AreaTableID; // 22 common zone for instance and continent map
|
||||
//char* MapDescription0[16]; // 23-38 text for PvP Zones (Horde)
|
||||
//char const* MapDescription0[16]; // 23-38 text for PvP Zones (Horde)
|
||||
//uint32 MapDescription0_lang_mask; // 39
|
||||
//char* MapDescription1[16]; // 40-55 text for PvP Zones (Alliance)
|
||||
//char const* MapDescription1[16]; // 40-55 text for PvP Zones (Alliance)
|
||||
//uint32 MapDescription1_lang_mask; // 56
|
||||
uint32 LoadingScreenID; // 57
|
||||
//float MinimapIconScale; // 58
|
||||
@@ -1124,31 +1124,31 @@ struct MapDifficultyEntry
|
||||
//uint32 ID; // 0
|
||||
uint32 MapID; // 1
|
||||
uint32 Difficulty; // 2 (for arenas: arena slot)
|
||||
char* Message; // 3-18 text showed when transfer to map failed (missing requirements)
|
||||
char const* Message; // 3-18 text showed when transfer to map failed (missing requirements)
|
||||
//uint32 Message_lang_mask; // 19
|
||||
uint32 RaidDuration; // 20
|
||||
uint32 MaxPlayers; // 21
|
||||
//char* Difficultystring; // 22
|
||||
//char const* Difficultystring; // 22
|
||||
};
|
||||
|
||||
struct MovieEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
//char* Filename; // 1
|
||||
//char const* Filename; // 1
|
||||
//uint32 Volume; // 2 always 100
|
||||
};
|
||||
|
||||
struct NamesProfanityEntry
|
||||
{
|
||||
//uint32 ID; // 0
|
||||
char* Name; // 1
|
||||
char const* Name; // 1
|
||||
int32 Language; // 2
|
||||
};
|
||||
|
||||
struct NamesReservedEntry
|
||||
{
|
||||
//uint32 ID; // 0
|
||||
char* Name; // 1
|
||||
char const* Name; // 1
|
||||
int32 Language; // 2
|
||||
};
|
||||
|
||||
@@ -1165,7 +1165,7 @@ struct PowerDisplayEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
uint32 ActualType; // 1
|
||||
//char* GlobalStringBaseTag; // 2
|
||||
//char const* GlobalStringBaseTag; // 2
|
||||
//uint8 Red; // 3
|
||||
//uint8 Green; // 4
|
||||
//uint8 Blue; // 5
|
||||
@@ -1187,7 +1187,7 @@ struct PvPDifficultyEntry
|
||||
struct QuestSortEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
//char* SortName[16]; // 1-16
|
||||
//char const* SortName[16]; // 1-16
|
||||
//uint32 SortName_lang; // 17
|
||||
};
|
||||
|
||||
@@ -1310,12 +1310,12 @@ struct SkillLineEntry
|
||||
uint32 ID; // 0
|
||||
int32 CategoryID; // 1
|
||||
//uint32 SkillCostsID; // 2
|
||||
char* DisplayName[16]; // 3-18
|
||||
char const* DisplayName[16]; // 3-18
|
||||
//uint32 DisplayName_lang_mask; // 19
|
||||
//char* Description[16]; // 20-35
|
||||
//char const* Description[16]; // 20-35
|
||||
//uint32 Description_lang_mask; // 36
|
||||
uint32 SpellIconID; // 37
|
||||
//char* AlternateVerb[16]; // 38-53
|
||||
//char const* AlternateVerb[16]; // 38-53
|
||||
//uint32 AlternateVerb_lang_mask; // 54
|
||||
uint32 CanLink; // 55
|
||||
};
|
||||
@@ -1341,7 +1341,7 @@ struct SkillLineAbilityEntry
|
||||
struct SkillLineCategoryEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
char* Name[16]; // 1-17
|
||||
char const* Name[16]; // 1-17
|
||||
uint32 Name_lang_mask; // 18
|
||||
uint32 SortIndex; // 19
|
||||
};
|
||||
@@ -1372,10 +1372,10 @@ struct SoundEntriesEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
//uint32 SoundType; // 1
|
||||
//char* Name; // 2
|
||||
//char* File[10]; // 3-12
|
||||
//char const* Name; // 2
|
||||
//char const* File[10]; // 3-12
|
||||
//uint32 Freq[10]; // 13-22
|
||||
//char* DirectoryBase; // 23
|
||||
//char const* DirectoryBase; // 23
|
||||
//float VolumeFloat; // 24
|
||||
//uint32 Flags; // 25
|
||||
//float MinDistance; // 26
|
||||
@@ -1386,113 +1386,113 @@ struct SoundEntriesEntry
|
||||
|
||||
struct SpellEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
uint32 Category; // 1
|
||||
uint32 DispelType; // 2
|
||||
uint32 Mechanic; // 3
|
||||
uint32 Attributes; // 4
|
||||
uint32 AttributesEx; // 5
|
||||
uint32 AttributesExB; // 6
|
||||
uint32 AttributesExC; // 7
|
||||
uint32 AttributesExD; // 8
|
||||
uint32 AttributesExE; // 9
|
||||
uint32 AttributesExF; // 10
|
||||
uint32 AttributesExG; // 11
|
||||
uint32 ShapeshiftMask[2]; // 12
|
||||
uint32 ShapeshiftExclude[2]; // 14
|
||||
uint32 Targets; // 16
|
||||
uint32 TargetCreatureType; // 17
|
||||
uint32 RequiresSpellFocus; // 18
|
||||
uint32 FacingCasterFlags; // 19
|
||||
uint32 CasterAuraState; // 20
|
||||
uint32 TargetAuraState; // 21
|
||||
uint32 ExcludeCasterAuraState; // 22
|
||||
uint32 ExcludeTargetAuraState; // 23
|
||||
uint32 CasterAuraSpell; // 24
|
||||
uint32 TargetAuraSpell; // 25
|
||||
uint32 ExcludeCasterAuraSpell; // 26
|
||||
uint32 ExcludeTargetAuraSpell; // 27
|
||||
uint32 CastingTimeIndex; // 28
|
||||
uint32 RecoveryTime; // 29
|
||||
uint32 CategoryRecoveryTime; // 30
|
||||
uint32 InterruptFlags; // 31
|
||||
uint32 AuraInterruptFlags; // 32
|
||||
uint32 ChannelInterruptFlags; // 33
|
||||
uint32 ProcTypeMask; // 34
|
||||
uint32 ProcChance; // 35
|
||||
uint32 ProcCharges; // 36
|
||||
uint32 MaxLevel; // 37
|
||||
uint32 BaseLevel; // 38
|
||||
uint32 SpellLevel; // 39
|
||||
uint32 DurationIndex; // 40
|
||||
uint32 PowerType; // 41
|
||||
uint32 ManaCost; // 42
|
||||
uint32 ManaCostPerLevel; // 43
|
||||
uint32 ManaPerSecond; // 44
|
||||
uint32 ManaPerSecondPerLevel; // 45
|
||||
uint32 RangeIndex; // 46
|
||||
float Speed; // 47
|
||||
//uint32 ModalNextSpell; // 48
|
||||
uint32 CumulativeAura; // 49
|
||||
uint32 Totem[2]; // 50-51
|
||||
int32 Reagent[MAX_SPELL_REAGENTS]; // 52-59
|
||||
uint32 ReagentCount[MAX_SPELL_REAGENTS]; // 60-67
|
||||
int32 EquippedItemClass; // 68
|
||||
int32 EquippedItemSubclass; // 69
|
||||
int32 EquippedItemInvTypes; // 70
|
||||
uint32 Effect[MAX_SPELL_EFFECTS]; // 71-73
|
||||
int32 EffectDieSides[MAX_SPELL_EFFECTS]; // 74-76
|
||||
float EffectRealPointsPerLevel[MAX_SPELL_EFFECTS]; // 77-79
|
||||
int32 EffectBasePoints[MAX_SPELL_EFFECTS]; // 80-82
|
||||
uint32 EffectMechanic[MAX_SPELL_EFFECTS]; // 83-85
|
||||
uint32 EffectImplicitTargetA[MAX_SPELL_EFFECTS]; // 86-88
|
||||
uint32 EffectImplicitTargetB[MAX_SPELL_EFFECTS]; // 89-91
|
||||
uint32 EffectRadiusIndex[MAX_SPELL_EFFECTS]; // 92-94
|
||||
uint32 EffectAura[MAX_SPELL_EFFECTS]; // 95-97
|
||||
uint32 EffectAuraPeriod[MAX_SPELL_EFFECTS]; // 98-100
|
||||
float EffectAmplitude[MAX_SPELL_EFFECTS]; // 101-103
|
||||
uint32 EffectChainTargets[MAX_SPELL_EFFECTS]; // 104-106
|
||||
uint32 EffectItemType[MAX_SPELL_EFFECTS]; // 107-109
|
||||
int32 EffectMiscValue[MAX_SPELL_EFFECTS]; // 110-112
|
||||
int32 EffectMiscValueB[MAX_SPELL_EFFECTS]; // 113-115
|
||||
uint32 EffectTriggerSpell[MAX_SPELL_EFFECTS]; // 116-118
|
||||
float EffectPointsPerCombo[MAX_SPELL_EFFECTS]; // 119-121
|
||||
flag96 EffectSpellClassMask[MAX_SPELL_EFFECTS]; // 122-130
|
||||
uint32 SpellVisualID[2]; // 131-132
|
||||
uint32 SpellIconID; // 133
|
||||
uint32 ActiveIconID; // 134
|
||||
uint32 SpellPriority; // 135
|
||||
char* Name[16]; // 136-151
|
||||
//uint32 Name_lang_mask; // 152
|
||||
char* NameSubtext[16]; // 153-168
|
||||
//uint32 NameSubtext_lang_mask; // 169
|
||||
//char* Description[16]; // 170-185
|
||||
//uint32 Description_lang_mask; // 186
|
||||
//char* AuraDescription[16]; // 187-202
|
||||
//uint32 AuraDescription_lang_mask; // 203
|
||||
uint32 ManaCostPct; // 204
|
||||
uint32 StartRecoveryCategory; // 205
|
||||
uint32 StartRecoveryTime; // 206
|
||||
uint32 MaxTargetLevel; // 207
|
||||
uint32 SpellClassSet; // 208
|
||||
flag96 SpellClassMask; // 209-211
|
||||
uint32 MaxTargets; // 212
|
||||
uint32 DefenseType; // 213
|
||||
uint32 PreventionType; // 214
|
||||
//uint32 StanceBarOrder; // 215
|
||||
float EffectChainAmplitude[MAX_SPELL_EFFECTS]; // 216-218
|
||||
//uint32 MinFactionID; // 219
|
||||
//uint32 MinReputation; // 220
|
||||
//uint32 RequiredAuraVision; // 221
|
||||
uint32 RequiredTotemCategoryID[2]; // 222-223
|
||||
int32 RequiredAreasID; // 224
|
||||
uint32 SchoolMask; // 225
|
||||
uint32 RuneCostID; // 226
|
||||
//uint32 SpellMissileID; // 227
|
||||
//uint32 PowerDisplayID; // 228
|
||||
float EffectBonusCoefficient[MAX_SPELL_EFFECTS]; // 229-231
|
||||
//uint32 DescriptionVariablesID; // 232
|
||||
//uint32 Difficulty; // 233
|
||||
uint32 ID; // 0
|
||||
uint32 Category; // 1
|
||||
uint32 DispelType; // 2
|
||||
uint32 Mechanic; // 3
|
||||
uint32 Attributes; // 4
|
||||
uint32 AttributesEx; // 5
|
||||
uint32 AttributesExB; // 6
|
||||
uint32 AttributesExC; // 7
|
||||
uint32 AttributesExD; // 8
|
||||
uint32 AttributesExE; // 9
|
||||
uint32 AttributesExF; // 10
|
||||
uint32 AttributesExG; // 11
|
||||
std::array<uint32, 2> ShapeshiftMask; // 12-13
|
||||
std::array<uint32, 2> ShapeshiftExclude; // 14-15
|
||||
uint32 Targets; // 16
|
||||
uint32 TargetCreatureType; // 17
|
||||
uint32 RequiresSpellFocus; // 18
|
||||
uint32 FacingCasterFlags; // 19
|
||||
uint32 CasterAuraState; // 20
|
||||
uint32 TargetAuraState; // 21
|
||||
uint32 ExcludeCasterAuraState; // 22
|
||||
uint32 ExcludeTargetAuraState; // 23
|
||||
uint32 CasterAuraSpell; // 24
|
||||
uint32 TargetAuraSpell; // 25
|
||||
uint32 ExcludeCasterAuraSpell; // 26
|
||||
uint32 ExcludeTargetAuraSpell; // 27
|
||||
uint32 CastingTimeIndex; // 28
|
||||
uint32 RecoveryTime; // 29
|
||||
uint32 CategoryRecoveryTime; // 30
|
||||
uint32 InterruptFlags; // 31
|
||||
uint32 AuraInterruptFlags; // 32
|
||||
uint32 ChannelInterruptFlags; // 33
|
||||
uint32 ProcTypeMask; // 34
|
||||
uint32 ProcChance; // 35
|
||||
uint32 ProcCharges; // 36
|
||||
uint32 MaxLevel; // 37
|
||||
uint32 BaseLevel; // 38
|
||||
uint32 SpellLevel; // 39
|
||||
uint32 DurationIndex; // 40
|
||||
uint32 PowerType; // 41
|
||||
uint32 ManaCost; // 42
|
||||
uint32 ManaCostPerLevel; // 43
|
||||
uint32 ManaPerSecond; // 44
|
||||
uint32 ManaPerSecondPerLevel; // 45
|
||||
uint32 RangeIndex; // 46
|
||||
float Speed; // 47
|
||||
//uint32 ModalNextSpell; // 48
|
||||
uint32 CumulativeAura; // 49
|
||||
std::array<uint32, 2> Totem; // 50-51
|
||||
std::array<int32, MAX_SPELL_REAGENTS> Reagent; // 52-59
|
||||
std::array<uint32, MAX_SPELL_REAGENTS> ReagentCount; // 60-67
|
||||
int32 EquippedItemClass; // 68
|
||||
int32 EquippedItemSubclass; // 69
|
||||
int32 EquippedItemInvTypes; // 70
|
||||
std::array<uint32, MAX_SPELL_EFFECTS> Effect; // 71-73
|
||||
std::array<int32, MAX_SPELL_EFFECTS> EffectDieSides; // 74-76
|
||||
std::array<float, MAX_SPELL_EFFECTS> EffectRealPointsPerLevel; // 77-79
|
||||
std::array<int32, MAX_SPELL_EFFECTS> EffectBasePoints; // 80-82
|
||||
std::array<uint32, MAX_SPELL_EFFECTS> EffectMechanic; // 83-85
|
||||
std::array<uint32, MAX_SPELL_EFFECTS> EffectImplicitTargetA; // 86-88
|
||||
std::array<uint32, MAX_SPELL_EFFECTS> EffectImplicitTargetB; // 89-91
|
||||
std::array<uint32, MAX_SPELL_EFFECTS> EffectRadiusIndex; // 92-94
|
||||
std::array<uint32, MAX_SPELL_EFFECTS> EffectAura; // 95-97
|
||||
std::array<uint32, MAX_SPELL_EFFECTS> EffectAuraPeriod; // 98-100
|
||||
std::array<float, MAX_SPELL_EFFECTS> EffectAmplitude; // 101-103
|
||||
std::array<uint32, MAX_SPELL_EFFECTS> EffectChainTargets; // 104-106
|
||||
std::array<uint32, MAX_SPELL_EFFECTS> EffectItemType; // 107-109
|
||||
std::array<int32, MAX_SPELL_EFFECTS> EffectMiscValue; // 110-112
|
||||
std::array<int32, MAX_SPELL_EFFECTS> EffectMiscValueB; // 113-115
|
||||
std::array<uint32, MAX_SPELL_EFFECTS> EffectTriggerSpell; // 116-118
|
||||
std::array<float, MAX_SPELL_EFFECTS> EffectPointsPerCombo; // 119-121
|
||||
std::array<flag96, MAX_SPELL_EFFECTS> EffectSpellClassMask; // 122-130
|
||||
std::array<uint32, 2> SpellVisualID; // 131-132
|
||||
uint32 SpellIconID; // 133
|
||||
uint32 ActiveIconID; // 134
|
||||
uint32 SpellPriority; // 135
|
||||
std::array<char const*, 16> Name; // 136-151
|
||||
//uint32 Name_lang_mask; // 152
|
||||
std::array<char const*, 16> NameSubtext; // 153-168
|
||||
//uint32 NameSubtext_lang_mask; // 169
|
||||
//std::array<char const*, 16> Description; // 170-185
|
||||
//uint32 Description_lang_mask; // 186
|
||||
//std::array<char const*, 16> AuraDescription; // 187-202
|
||||
//uint32 AuraDescription_lang_mask; // 203
|
||||
uint32 ManaCostPct; // 204
|
||||
uint32 StartRecoveryCategory; // 205
|
||||
uint32 StartRecoveryTime; // 206
|
||||
uint32 MaxTargetLevel; // 207
|
||||
uint32 SpellClassSet; // 208
|
||||
flag96 SpellClassMask; // 209-211
|
||||
uint32 MaxTargets; // 212
|
||||
uint32 DefenseType; // 213
|
||||
uint32 PreventionType; // 214
|
||||
//uint32 StanceBarOrder; // 215
|
||||
std::array<float, MAX_SPELL_EFFECTS> EffectChainAmplitude; // 216-218
|
||||
//uint32 MinFactionID; // 219
|
||||
//uint32 MinReputation; // 220
|
||||
//uint32 RequiredAuraVision; // 221
|
||||
std::array<uint32, 2> RequiredTotemCategoryID; // 222-223
|
||||
int32 RequiredAreasID; // 224
|
||||
uint32 SchoolMask; // 225
|
||||
uint32 RuneCostID; // 226
|
||||
//uint32 SpellMissileID; // 227
|
||||
//uint32 PowerDisplayID; // 228
|
||||
std::array<float, MAX_SPELL_EFFECTS> EffectBonusCoefficient; // 229-231
|
||||
//uint32 DescriptionVariablesID; // 232
|
||||
//uint32 Difficulty; // 233
|
||||
};
|
||||
|
||||
typedef std::set<uint32> PetFamilySpellsSet;
|
||||
@@ -1529,7 +1529,7 @@ struct SpellDurationEntry
|
||||
struct SpellFocusObjectEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
//char* Name[16]; // 1-15
|
||||
//char const* Name[16]; // 1-15
|
||||
//uint32 Name_lang_mask; // 16
|
||||
};
|
||||
|
||||
@@ -1541,7 +1541,7 @@ struct SpellItemEnchantmentEntry
|
||||
uint32 EffectPointsMin[MAX_ITEM_ENCHANTMENT_EFFECTS]; // 5-7
|
||||
//uint32 EffectPointsMax[MAX_ITEM_ENCHANTMENT_EFFECTS] // 8-10
|
||||
uint32 EffectArg[MAX_ITEM_ENCHANTMENT_EFFECTS]; // 11-13
|
||||
char* Name[16]; // 14-29
|
||||
char const* Name[16]; // 14-29
|
||||
//uint32 Name_lang_mask; // 30
|
||||
uint32 ItemVisual; // 31
|
||||
uint32 Flags; // 32
|
||||
@@ -1577,9 +1577,9 @@ struct SpellRangeEntry
|
||||
float RangeMin[2]; // 1-2 [0] Hostile [1] Friendly
|
||||
float RangeMax[2]; // 3-4 [0] Hostile [1] Friendly
|
||||
uint32 Flags; // 5
|
||||
//char* DisplayName[16]; // 6-21
|
||||
//char const* DisplayName[16]; // 6-21
|
||||
//uint32 DisplayName_lang_mask; // 22
|
||||
//char* DisplayNameShort[16]; // 23-38
|
||||
//char const* DisplayNameShort[16]; // 23-38
|
||||
//uint32 DisplayNameShort_lang_mask; // 39
|
||||
};
|
||||
|
||||
@@ -1599,7 +1599,7 @@ struct SpellShapeshiftFormEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
//uint32 BonusActionBar; // 1
|
||||
//char* Name[16]; // 2-17
|
||||
//char const* Name[16]; // 2-17
|
||||
//uint32 Name_lang_mask; // 18
|
||||
uint32 Flags; // 19
|
||||
int32 CreatureType; // 20 <= 0 humanoid, other normal creature types
|
||||
@@ -1677,14 +1677,14 @@ struct TalentEntry
|
||||
struct TalentTabEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
//char* Name[16]; // 1-16
|
||||
//char const* Name[16]; // 1-16
|
||||
//uint32 Name_lang_mask; // 17
|
||||
//unit32 SpellIconID; // 18
|
||||
//uint32 RaceMask; // 19
|
||||
uint32 ClassMask; // 20
|
||||
uint32 PetTalentMask; // 21
|
||||
uint32 OrderIndex; // 22
|
||||
//char* BackgroundFile; // 23
|
||||
//char const* BackgroundFile; // 23
|
||||
};
|
||||
|
||||
struct TaxiNodesEntry
|
||||
@@ -1692,7 +1692,7 @@ struct TaxiNodesEntry
|
||||
uint32 ID; // 0
|
||||
uint32 ContinentID; // 1
|
||||
DBCPosition3D Pos; // 2-4
|
||||
char* Name[16]; // 5-21
|
||||
char const* Name[16]; // 5-21
|
||||
//uint32 Name_lang_mask; // 22
|
||||
uint32 MountCreatureID[2]; // 23-24
|
||||
};
|
||||
@@ -1727,7 +1727,7 @@ struct TeamContributionPointsEntry
|
||||
struct TotemCategoryEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
//char* Name[16]; // 1-16
|
||||
//char const* Name[16]; // 1-16
|
||||
//uint32 Name_lang_mask; // 17
|
||||
uint32 TotemCategoryType; // 18 (one for specialization)
|
||||
uint32 TotemCategoryMask; // 19 (compatibility mask for same type: different for totems, compatible from high to low for rods)
|
||||
@@ -1778,9 +1778,9 @@ struct VehicleEntry
|
||||
float MsslTrgtArcRepeat; // 25
|
||||
float MsslTrgtArcWidth; // 26
|
||||
float MsslTrgtImpactRadius[2]; // 27-28
|
||||
char* MsslTrgtArcTexture; // 29
|
||||
char* MsslTrgtImpactTexture; // 30
|
||||
char* MsslTrgtImpactModel[2]; // 31-32
|
||||
char const* MsslTrgtArcTexture; // 29
|
||||
char const* MsslTrgtImpactTexture; // 30
|
||||
char const* MsslTrgtImpactModel[2]; // 31-32
|
||||
float CameraYawOffset; // 33
|
||||
uint32 UiLocomotionType; // 34
|
||||
float MsslTrgtImpactTexRadius; // 35
|
||||
@@ -1870,7 +1870,7 @@ struct WMOAreaTableEntry
|
||||
//uint32 IntroSound; // 8
|
||||
uint32 Flags; // 9 used for indoor/outdoor determination
|
||||
uint32 AreaTableID; // 10 link to AreaTableEntry.ID
|
||||
//char* AreaName[16]; // 11
|
||||
//char const* AreaName[16]; // 11
|
||||
//uint32 AreaName_lang_mask; // 12
|
||||
};
|
||||
|
||||
@@ -1879,7 +1879,7 @@ struct WorldMapAreaEntry
|
||||
//uint32 ID; // 0
|
||||
uint32 MapID; // 1
|
||||
uint32 AreaID; // 2
|
||||
//char* AreaName // 3
|
||||
//char const* AreaName // 3
|
||||
float LocLeft; // 4
|
||||
float LocRight; // 5
|
||||
float LocTop; // 6
|
||||
@@ -1898,7 +1898,7 @@ struct WorldMapOverlayEntry
|
||||
uint32 AreaID[MAX_WORLD_MAP_OVERLAY_AREA_IDX]; // 2-5
|
||||
//uint32 MapPointX; // 6
|
||||
//uint32 MapPointY; // 7
|
||||
//char* TextureName // 8
|
||||
//char const* TextureName // 8
|
||||
//uint32 TextureWidth; // 9
|
||||
//uint32 TextureHeight; // 10
|
||||
//uint32 OffsetX; // 11
|
||||
@@ -1914,7 +1914,7 @@ struct WorldSafeLocsEntry
|
||||
uint32 ID; // 0
|
||||
uint32 Continent; // 1
|
||||
DBCPosition3D Loc; // 2-4
|
||||
//char* AreaName[16] // 5-20
|
||||
//char const* AreaName[16] // 5-20
|
||||
//uint32 AreaName_lang_mask; // 21
|
||||
};
|
||||
|
||||
@@ -1925,17 +1925,17 @@ struct WorldStateUI
|
||||
uint32 MapID; // 1 Can be -1 to show up everywhere.
|
||||
uint32 AreaID; // 2 Can be zero for "everywhere".
|
||||
uint32 PhaseShift; // 3 Phase this WorldState is avaliable in
|
||||
char* Icon; // 4 The icon that is used in the interface.
|
||||
char* String; // 5-20
|
||||
char const* Icon; // 4 The icon that is used in the interface.
|
||||
char const* String; // 5-20
|
||||
uint32 String_lang_mask; // 21
|
||||
char* Tooltip; // 22-37
|
||||
char const* Tooltip; // 22-37
|
||||
uint32 Tooltip_lang_mask; // 38
|
||||
uint32 StateVariable; // 39
|
||||
uint32 Type; // 40 0 = unknown, 1 = unknown, 2 = not shown in ui, 3 = wintergrasp
|
||||
char* DynamicIcon; // 41
|
||||
char* DynamicTooltip[16]; // 42-57
|
||||
char const* DynamicIcon; // 41
|
||||
char const* DynamicTooltip[16]; // 42-57
|
||||
uint32 DynamicTooltip_lang_mask; // 58
|
||||
char* ExtendedUI; // 59
|
||||
char const* ExtendedUI; // 59
|
||||
uint32 ExtendedUIStateVariable[3]; // 60-62
|
||||
};
|
||||
*/
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/*
|
||||
* This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
@@ -17,6 +17,7 @@
|
||||
|
||||
#include "DummyData.h"
|
||||
|
||||
#include "AchievementMgr.h"
|
||||
#include "ItemDefines.h"
|
||||
#include "ItemTemplate.h"
|
||||
#include "ObjectMgr.h"
|
||||
@@ -127,3 +128,23 @@
|
||||
|
||||
SetItemLocale(6948, LocaleConstant::LOCALE_esMX, "Piedra de hogar");
|
||||
}
|
||||
|
||||
static UnitTestDataLoader::DBC<AchievementEntry, &AchievementEntry::ID> achievements(sAchievementStore);
|
||||
/*static*/ void UnitTestDataLoader::LoadAchievementTemplates()
|
||||
{
|
||||
auto loader = achievements.Loader();
|
||||
|
||||
AchievementEntry& toc5 = loader.Add();
|
||||
toc5.ID = 4298;
|
||||
toc5.Faction = 1;
|
||||
toc5.InstanceID = 650;
|
||||
toc5.Title.fill("");
|
||||
toc5.Title[LOCALE_enUS] = "Heroic: Trial of the Champion";
|
||||
toc5.Title[LOCALE_esES] = "Heroico: Prueba del Campe\xc3\xb3n";
|
||||
toc5.Title[LOCALE_esMX] = "Heroico: Prueba del Campe\xc3\xb3n";
|
||||
toc5.Category = 14921;
|
||||
toc5.Points = 10;
|
||||
toc5.Flags = 0;
|
||||
toc5.MinimumCriteria = 0;
|
||||
toc5.SharesCriteria = 0;
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
|
||||
#include "Common.h"
|
||||
#include "Define.h"
|
||||
#include "DBCStore.h"
|
||||
|
||||
#include <string_view>
|
||||
|
||||
@@ -28,6 +29,42 @@ struct ItemTemplate;
|
||||
class UnitTestDataLoader
|
||||
{
|
||||
public:
|
||||
template <typename T, uint32 T::*ID>
|
||||
class DBC
|
||||
{
|
||||
class LoaderGuard
|
||||
{
|
||||
public:
|
||||
LoaderGuard(DBC& d) : _d(d) {}
|
||||
~LoaderGuard() { _d.Dump(); }
|
||||
|
||||
T& Add() { return _d._storage.emplace_back(); }
|
||||
private:
|
||||
DBC& _d;
|
||||
};
|
||||
|
||||
public:
|
||||
DBC(DBCStorage<T>& store) : _store(store) {}
|
||||
LoaderGuard Loader() { return {*this}; }
|
||||
void Dump()
|
||||
{
|
||||
delete[] _store._indexTable.AsT;
|
||||
for (T const& entry : _storage)
|
||||
if (entry.*ID >= _store._indexTableSize)
|
||||
_store._indexTableSize = entry.*ID + 1;
|
||||
_store._indexTable.AsT = new T*[_store._indexTableSize];
|
||||
for (size_t i = 0; i < _store._indexTableSize; ++i)
|
||||
_store._indexTable.AsT[i] = nullptr;
|
||||
for (T& entry : _storage)
|
||||
_store._indexTable.AsT[entry.*ID] = &entry;
|
||||
}
|
||||
|
||||
private:
|
||||
std::vector<T> _storage;
|
||||
DBCStorage<T>& _store;
|
||||
};
|
||||
|
||||
static void LoadAchievementTemplates();
|
||||
static void LoadItemTemplates();
|
||||
|
||||
private:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/*
|
||||
* This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
@@ -72,3 +72,21 @@ TEST_CASE("|Hitem validation", "[Hyperlinks]")
|
||||
REQUIRE(false == CheckAllLinks("This is a |cffffffff|Hitem:6948:-1:0:0:0:0:0:0:-1|h[Hearthstone]|h|r that is quite negative."));
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("|Hachievement validation", "[Hyperlinks]")
|
||||
{
|
||||
UnitTestDataLoader::LoadAchievementTemplates();
|
||||
sWorld->setIntConfig(CONFIG_CHAT_STRICT_LINK_CHECKING_SEVERITY, 1);
|
||||
|
||||
REQUIRE(true == CheckAllLinks("|cffffff00|Hachievement:4298:00000000000000FD:0:0:0:-1:0:0:0:0|h[Heroic: Trial of the Champion]|h|r"));
|
||||
REQUIRE(false == CheckAllLinks("|cffffff00|Hachievement|h[Heroic: Trial of the Champion]|h|r"));
|
||||
REQUIRE(false == CheckAllLinks("|cffffff00|Hachievement:1:00000000000000FD:0:0:0:-1:0:0:0:0|h[Heroic: Trial of the Champion]|h|r"));
|
||||
REQUIRE(false == CheckAllLinks("|cffff0000|Hachievement:4298:00000000000000FD:0:0:0:-1:0:0:0:0|h[Heroic: Trial of the Champion]|h|r"));
|
||||
REQUIRE(false == CheckAllLinks("|cffffff00|Hachievement:4298:00000000000000XY:0:0:0:-1:0:0:0:0|h[Heroic: Trial of the Champion]|h|r"));
|
||||
REQUIRE(true == CheckAllLinks("|cffffff00|Hachievement:4298:00000000000000FD:1:12:20:12:0:0:0:0|h[Heroic: Trial of the Champion]|h|r"));
|
||||
REQUIRE(false == CheckAllLinks("|cffffff00|Hachievement:4298:00000000000000FD:1:12:40:12:0:0:0:0|h[Heroic: Trial of the Champion]|h|r"));
|
||||
REQUIRE(false == CheckAllLinks("|cffffff00|Hachievement:4298:00000000000000FD:1:14:20:12:0:0:0:0|h[Heroic: Trial of the Champion]|h|r"));
|
||||
REQUIRE(false == CheckAllLinks("|cffffff00|Hachievement:4298:00000000000000FD:1:0:0:-1:0:0:0:0|h[Heroic: Trial of the Champion]|h|r"));
|
||||
|
||||
REQUIRE(true == CheckAllLinks("|cffffff00|Hachievement:4298:00000000000000FD:1:12:20:12:0:0:0:0|h[Heroico: Prueba del Campe\xc3\xb3n]|h|r"));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user