mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 16:37:01 +00:00
Added achievement dbc stuff, fixed linux build
This commit is contained in:
parent
c6aeb74917
commit
ba4b9ad480
9 changed files with 583 additions and 1 deletions
|
|
@ -63,6 +63,9 @@ libmangosgame_a_SOURCES = \
|
||||||
BattleGroundHandler.cpp \
|
BattleGroundHandler.cpp \
|
||||||
BattleGroundMgr.cpp \
|
BattleGroundMgr.cpp \
|
||||||
BattleGroundMgr.h \
|
BattleGroundMgr.h \
|
||||||
|
Calendar.cpp \
|
||||||
|
Calendar.h \
|
||||||
|
CalendarHandler.cpp \
|
||||||
Cell.h \
|
Cell.h \
|
||||||
CellImpl.h \
|
CellImpl.h \
|
||||||
Channel.cpp \
|
Channel.cpp \
|
||||||
|
|
|
||||||
|
|
@ -6046,6 +6046,23 @@ int ObjectMgr::GetOrNewIndexForLocale( LocaleConstant loc )
|
||||||
return m_LocalForIndex.size()-1;
|
return m_LocalForIndex.size()-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AchievementCriteriaEntryList const& ObjectMgr::GetAchievementCriteriaByType(AchievementCriteriaTypes type)
|
||||||
|
{
|
||||||
|
return m_AchievementCriteriasByType[type];
|
||||||
|
}
|
||||||
|
|
||||||
|
void ObjectMgr::LoadAchievementCriteriaList()
|
||||||
|
{
|
||||||
|
for (uint32 entryId = 0; entryId<sAchievementCriteriaStore.GetNumRows(); entryId++)
|
||||||
|
{
|
||||||
|
AchievementCriteriaEntry const* criteria = sAchievementCriteriaStore.LookupEntry(entryId);
|
||||||
|
if(!criteria)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
m_AchievementCriteriasByType[criteria->requiredType].push_back(criteria);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ObjectMgr::LoadBattleMastersEntry()
|
void ObjectMgr::LoadBattleMastersEntry()
|
||||||
{
|
{
|
||||||
mBattleMastersMap.clear(); // need for reload case
|
mBattleMastersMap.clear(); // need for reload case
|
||||||
|
|
|
||||||
|
|
@ -231,6 +231,8 @@ typedef HM_NAMESPACE::hash_map<uint32, uint32> CacheNpcTextIdMap;
|
||||||
typedef HM_NAMESPACE::hash_map<uint32, VendorItemData> CacheVendorItemMap;
|
typedef HM_NAMESPACE::hash_map<uint32, VendorItemData> CacheVendorItemMap;
|
||||||
typedef HM_NAMESPACE::hash_map<uint32, TrainerSpellData> CacheTrainerSpellMap;
|
typedef HM_NAMESPACE::hash_map<uint32, TrainerSpellData> CacheTrainerSpellMap;
|
||||||
|
|
||||||
|
typedef std::list<const AchievementCriteriaEntry*> AchievementCriteriaEntryList;
|
||||||
|
|
||||||
enum SkillRangeType
|
enum SkillRangeType
|
||||||
{
|
{
|
||||||
SKILL_RANGE_LANGUAGE, // 300..300
|
SKILL_RANGE_LANGUAGE, // 300..300
|
||||||
|
|
@ -739,6 +741,7 @@ class ObjectMgr
|
||||||
void AddVendorItem(uint32 entry,uint32 item, uint32 maxcount, uint32 incrtime, uint32 ExtendedCost);
|
void AddVendorItem(uint32 entry,uint32 item, uint32 maxcount, uint32 incrtime, uint32 ExtendedCost);
|
||||||
bool RemoveVendorItem(uint32 entry,uint32 item);
|
bool RemoveVendorItem(uint32 entry,uint32 item);
|
||||||
bool IsVendorItemValid( uint32 vendor_entry, uint32 item, uint32 maxcount, uint32 ptime, uint32 ExtendedCost, Player* pl = NULL, std::set<uint32>* skip_vendors = NULL ) const;
|
bool IsVendorItemValid( uint32 vendor_entry, uint32 item, uint32 maxcount, uint32 ptime, uint32 ExtendedCost, Player* pl = NULL, std::set<uint32>* skip_vendors = NULL ) const;
|
||||||
|
void LoadAchievementCriteriaList();
|
||||||
protected:
|
protected:
|
||||||
uint32 m_auctionid;
|
uint32 m_auctionid;
|
||||||
uint32 m_mailid;
|
uint32 m_mailid;
|
||||||
|
|
@ -803,6 +806,8 @@ class ObjectMgr
|
||||||
int GetOrNewIndexForLocale(LocaleConstant loc);
|
int GetOrNewIndexForLocale(LocaleConstant loc);
|
||||||
|
|
||||||
int DBCLocaleIndex;
|
int DBCLocaleIndex;
|
||||||
|
|
||||||
|
AchievementCriteriaEntryList const& GetAchievementCriteriaByType(AchievementCriteriaTypes type);
|
||||||
private:
|
private:
|
||||||
void LoadScripts(ScriptMapMap& scripts, char const* tablename);
|
void LoadScripts(ScriptMapMap& scripts, char const* tablename);
|
||||||
void ConvertCreatureAddonAuras(CreatureDataAddon* addon, char const* table, char const* guidEntryStr);
|
void ConvertCreatureAddonAuras(CreatureDataAddon* addon, char const* table, char const* guidEntryStr);
|
||||||
|
|
@ -850,6 +855,9 @@ class ObjectMgr
|
||||||
CacheNpcTextIdMap m_mCacheNpcTextIdMap;
|
CacheNpcTextIdMap m_mCacheNpcTextIdMap;
|
||||||
CacheVendorItemMap m_mCacheVendorItemMap;
|
CacheVendorItemMap m_mCacheVendorItemMap;
|
||||||
CacheTrainerSpellMap m_mCacheTrainerSpellMap;
|
CacheTrainerSpellMap m_mCacheTrainerSpellMap;
|
||||||
|
|
||||||
|
// store achievement criterias by type to speed up lookup
|
||||||
|
AchievementCriteriaEntryList m_AchievementCriteriasByType[ACHIEVEMENT_CRITERIA_TYPE_TOTAL];
|
||||||
};
|
};
|
||||||
|
|
||||||
#define objmgr MaNGOS::Singleton<ObjectMgr>::Instance()
|
#define objmgr MaNGOS::Singleton<ObjectMgr>::Instance()
|
||||||
|
|
|
||||||
|
|
@ -928,6 +928,9 @@ void World::SetInitialWorldSettings()
|
||||||
sLog.outString( "Loading InstanceTemplate" );
|
sLog.outString( "Loading InstanceTemplate" );
|
||||||
objmgr.LoadInstanceTemplate();
|
objmgr.LoadInstanceTemplate();
|
||||||
|
|
||||||
|
sLog.outString( "Loading AchievementCriteriaList..." );
|
||||||
|
objmgr.LoadAchievementCriteriaList();
|
||||||
|
|
||||||
sLog.outString( "Loading SkillLineAbilityMultiMap Data..." );
|
sLog.outString( "Loading SkillLineAbilityMultiMap Data..." );
|
||||||
spellmgr.LoadSkillLineAbilityMap();
|
spellmgr.LoadSkillLineAbilityMap();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,138 @@ enum AreaTeams
|
||||||
AREATEAM_HORDE = 4
|
AREATEAM_HORDE = 4
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum AchievementFactionFlags
|
||||||
|
{
|
||||||
|
ACHIEVEMENT_FACTION_FLAG_HORDE = 0x00000000,
|
||||||
|
ACHIEVEMENT_FACTION_FLAG_ALLIANCE = 0x00000001,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum AchievementFlags
|
||||||
|
{
|
||||||
|
// This achievement is a counter and can never be "fulfilled"
|
||||||
|
ACHIEVEMENT_FLAG_COUNTER = 0x00000001,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum AchievementCriteriaCompletionFlags
|
||||||
|
{
|
||||||
|
// some Achievements (like 698) have several criteria but only one has to be fulfilled. These are identified by this flag.
|
||||||
|
ACHIEVEMENT_CRITERIA_COMPLETE_FLAG_ALL = 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum AchievementCriteriaGroupFlags
|
||||||
|
{
|
||||||
|
// you mustn't be in a group while fulfilling this achievement
|
||||||
|
ACHIEVEMENT_CRITERIA_GROUP_NOT_IN_GROUP = 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum AchievementCriteriaTypes
|
||||||
|
{
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE = 0,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_WIN_BG = 1,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL = 5,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL = 7,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ARCHIEVEMENT = 8,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST_COUNT = 9,
|
||||||
|
// you have to complete a daily quest x times in a row
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST_DAILY = 10,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUESTS_IN_ZONE = 11,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST = 14,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND= 15,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_DEATH_AT_MAP= 16,
|
||||||
|
// TODO: this can be both arena and total deaths. Where is this difference in the dbc?
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_DEATH= 17,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_DEATH_IN_DUNGEON = 18,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_RAID = 19,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_CREATURE = 20,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_PLAYER = 23,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_FALL_WITHOUT_DYING = 24,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST = 27,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET = 28,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL= 29,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE = 30,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL_AT_AREA = 31,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_WIN_ARENA = 32,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_PLAY_ARENA = 33,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_LEARN_SPELL = 34,
|
||||||
|
// TODO: this criteria has additional conditions which can not be found in the dbcs
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL = 35,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_OWN_ITEM = 36,
|
||||||
|
// TODO: the archievements 1162 and 1163 requires a special rating which can't be found in the dbc
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA = 37,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_TEAM_RATING = 38,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_REACH_TEAM_RATING = 39,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LEVEL = 40,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM = 41,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_LOOT_ITEM= 42,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_EXPLORE_AREA = 43,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_OWN_RANK= 44,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_BUY_BANK_SLOT= 45,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_GAIN_REPUTATION= 46,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_GAIN_EXALTED_REPUTATION= 47,
|
||||||
|
// noted: rewarded as soon as the player payed, not at taking place at the seat
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_VISIT_BARBER_SHOP= 48,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM = 49,
|
||||||
|
// TODO: itemlevel is mentioned in text but not present in dbc
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT = 50,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_HK_CLASS = 52,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_HK_RACE = 53,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_DO_EMOTE = 54,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_HEALING_DONE = 55,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_EQUIP_ITEM = 57,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_TALENTS = 60,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_NUMBER_OF_TALENT_RESETS = 61,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_TRAVELLING = 63,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_AT_BARBER = 65,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_MAIL = 66,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_LOOT_MONEY = 67,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_USE_GAMEOBJECT = 68,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2= 69,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_SPECIAL_PVP_KILL= 70,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_FISH_IN_GAMEOBJECT = 72,
|
||||||
|
// TODO: title id is not mentioned in dbc
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_EARNED_PVP_TITLE = 74,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS= 75,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_WIN_DUEL = 76,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_LOSE_DUEL = 77,
|
||||||
|
// TODO: creature type (demon, undead etc.) is not stored in dbc
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE_TYPE = 78,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_GOLD_EARNED_BY_AUCTIONS= 80,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_CREATE_AUCTION= 82,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_AUCTION_BID= 83,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_WON_AUCTIONS= 84,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_AUCTION_SOLD = 85,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_GOLD_VALUE_OWNED = 86,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_GAIN_REVERED_REPUTATION = 87,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_GAIN_HONORED_REPUTATION = 88,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_KNOWN_FACTIONS = 89,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_LOOT_EPIC_ITEM = 90,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_RECEIVE_EPIC_ITEM = 91,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED = 93,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED = 94,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEALTH = 95,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_POWER = 96,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_STAT = 97,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_SPELLPOWER = 98,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_ARMOR = 99,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_RATING = 100,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HIT_DEALT = 101,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HIT_RECEIVED = 102,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_TOTAL_DAMAGE_RECEIVED = 103,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEAL_CASTED = 104,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_TOTAL_HEALING_RECEIVED = 105,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEALING_RECEIVED = 106,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_QUEST_ABANDONED = 107,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_FLIGHT_PATHS_TAKEN = 108,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE = 109,
|
||||||
|
// TODO: target entry is missing
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2 = 110,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LINE= 112,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_EARN_HONORABLE_KILL = 113,
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_ACCEPTED_SUMMONINGS = 114,
|
||||||
|
// 0..114 => 115 criteria types total
|
||||||
|
ACHIEVEMENT_CRITERIA_TYPE_TOTAL = 115,
|
||||||
|
};
|
||||||
|
|
||||||
enum AreaFlags
|
enum AreaFlags
|
||||||
{
|
{
|
||||||
AREA_FLAG_SNOW = 0x00000001, // snow (only Dun Morogh, Naxxramas, Razorfen Downs and Winterspring)
|
AREA_FLAG_SNOW = 0x00000001, // snow (only Dun Morogh, Naxxramas, Razorfen Downs and Winterspring)
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,8 @@ DBCStorage <AreaTableEntry> sAreaStore(AreaTableEntryfmt);
|
||||||
static AreaFlagByAreaID sAreaFlagByAreaID;
|
static AreaFlagByAreaID sAreaFlagByAreaID;
|
||||||
static AreaFlagByMapID sAreaFlagByMapID; // for instances without generated *.map files
|
static AreaFlagByMapID sAreaFlagByMapID; // for instances without generated *.map files
|
||||||
|
|
||||||
|
DBCStorage <AchievementEntry> sAchievementStore(Achievementfmt);
|
||||||
|
DBCStorage <AchievementCriteriaEntry> sAchievementCriteriaStore(AchievementCriteriafmt);
|
||||||
DBCStorage <AreaTriggerEntry> sAreaTriggerStore(AreaTriggerEntryfmt);
|
DBCStorage <AreaTriggerEntry> sAreaTriggerStore(AreaTriggerEntryfmt);
|
||||||
DBCStorage <BankBagSlotPricesEntry> sBankBagSlotPricesStore(BankBagSlotPricesEntryfmt);
|
DBCStorage <BankBagSlotPricesEntry> sBankBagSlotPricesStore(BankBagSlotPricesEntryfmt);
|
||||||
DBCStorage <BattlemasterListEntry> sBattlemasterListStore(BattlemasterListEntryfmt);
|
DBCStorage <BattlemasterListEntry> sBattlemasterListStore(BattlemasterListEntryfmt);
|
||||||
|
|
@ -182,7 +184,7 @@ void LoadDBCStores(std::string dataPath)
|
||||||
{
|
{
|
||||||
std::string dbcPath = dataPath+"dbc/";
|
std::string dbcPath = dataPath+"dbc/";
|
||||||
|
|
||||||
const uint32 DBCFilesCount = 60;
|
const uint32 DBCFilesCount = 65;
|
||||||
|
|
||||||
barGoLink bar( DBCFilesCount );
|
barGoLink bar( DBCFilesCount );
|
||||||
|
|
||||||
|
|
@ -205,6 +207,8 @@ void LoadDBCStores(std::string dataPath)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sAchievementStore, dbcPath,"Achievement.dbc");
|
||||||
|
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sAchievementCriteriaStore, dbcPath,"Achievement_Criteria.dbc");
|
||||||
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sAreaTriggerStore, dbcPath,"AreaTrigger.dbc");
|
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sAreaTriggerStore, dbcPath,"AreaTrigger.dbc");
|
||||||
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sBankBagSlotPricesStore, dbcPath,"BankBagSlotPrices.dbc");
|
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sBankBagSlotPricesStore, dbcPath,"BankBagSlotPrices.dbc");
|
||||||
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sBattlemasterListStore, dbcPath,"BattlemasterList.dbc");
|
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sBattlemasterListStore, dbcPath,"BattlemasterList.dbc");
|
||||||
|
|
|
||||||
|
|
@ -129,6 +129,8 @@ class DBCStorage
|
||||||
StringPoolList m_stringPoolList;
|
StringPoolList m_stringPoolList;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extern DBCStorage <AchievementEntry> sAchievementStore;
|
||||||
|
extern DBCStorage <AchievementCriteriaEntry> sAchievementCriteriaStore;
|
||||||
extern DBCStorage <AreaTableEntry> sAreaStore;// recommend access using functions
|
extern DBCStorage <AreaTableEntry> sAreaStore;// recommend access using functions
|
||||||
extern DBCStorage <AreaTriggerEntry> sAreaTriggerStore;
|
extern DBCStorage <AreaTriggerEntry> sAreaTriggerStore;
|
||||||
extern DBCStorage <BankBagSlotPricesEntry> sBankBagSlotPricesStore;
|
extern DBCStorage <BankBagSlotPricesEntry> sBankBagSlotPricesStore;
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,417 @@
|
||||||
#pragma pack(push,1)
|
#pragma pack(push,1)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
struct AchievementEntry
|
||||||
|
{
|
||||||
|
uint32 ID; // 0
|
||||||
|
uint32 factionFlag; // 1 -1=all, 0=horde, 1=alliance
|
||||||
|
uint32 mapID; // 2 -1=none
|
||||||
|
uint32 categoryId; // 38
|
||||||
|
uint32 points; // 39
|
||||||
|
uint32 flags; // 42
|
||||||
|
};
|
||||||
|
|
||||||
|
struct AchievementCategoryEntry
|
||||||
|
{
|
||||||
|
uint32 ID; // 0
|
||||||
|
uint32 parentCategory; // 1 -1 for main category
|
||||||
|
uint32 sortOrder; // 19
|
||||||
|
};
|
||||||
|
|
||||||
|
struct AchievementCriteriaEntry
|
||||||
|
{
|
||||||
|
uint32 ID; // 0
|
||||||
|
uint32 referredAchievement; // 1
|
||||||
|
uint32 requiredType; // 2
|
||||||
|
union
|
||||||
|
{
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE = 0
|
||||||
|
// TODO: also used for player deaths..
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 creatureID; // 3
|
||||||
|
uint32 creatureCount; // 4
|
||||||
|
} kill_creature;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_WIN_BG = 1
|
||||||
|
// TODO: there are further criterias instead just winning
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 bgMapID; // 3
|
||||||
|
uint32 winCount; // 4
|
||||||
|
} win_bg;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL = 5
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 unused; // 3
|
||||||
|
uint32 level; // 4
|
||||||
|
} reach_level;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL = 7
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 skillID; // 3
|
||||||
|
uint32 skillLevel; // 4
|
||||||
|
} reach_skill_level;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ARCHIEVEMENT = 8
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 linkedAchievement; // 3
|
||||||
|
} complete_achievement;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST_COUNT = 9
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 unused; // 3
|
||||||
|
uint32 totalQuestCount; // 4
|
||||||
|
} complete_quest_count;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST_DAILY = 10
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 unused; // 3
|
||||||
|
uint32 numberOfDays; // 4
|
||||||
|
} complete_daily_quest_daily;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUESTS_IN_ZONE = 11
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 zoneID; // 3
|
||||||
|
uint32 questCount; // 4
|
||||||
|
} complete_quests_in_zone;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST = 14
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 unused; // 3
|
||||||
|
uint32 questCount; // 4
|
||||||
|
} complete_daily_quest;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND= 15
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 mapID; // 3
|
||||||
|
} complete_battleground;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_DEATH_AT_MAP= 16
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 mapID; // 3
|
||||||
|
} death_at_map;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_RAID = 19
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 groupSize; // 3 can be 5, 10 or 25
|
||||||
|
} complete_raid;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_CREATURE = 20
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 creatureEntry; // 3
|
||||||
|
} killed_by_creature;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_FALL_WITHOUT_DYING = 24
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 unused; // 3
|
||||||
|
uint32 fallHeight; // 4
|
||||||
|
} fall_without_dying;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST = 27
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 questID; // 3
|
||||||
|
uint32 questCount; // 4
|
||||||
|
} complete_quest;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET = 28
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2= 69
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 spellID; // 3
|
||||||
|
uint32 spellCount; // 4
|
||||||
|
} be_spell_target;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL= 29
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 spellID; // 3
|
||||||
|
uint32 castCount; // 4
|
||||||
|
} cast_spell;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL_AT_AREA = 31
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 areaID; // 3 Reference to AreaTable.dbc
|
||||||
|
uint32 killCount; // 4
|
||||||
|
} honorable_kill_at_area;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_WIN_ARENA = 32
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 mapID; // 3 Reference to Map.dbc
|
||||||
|
} win_arena;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_PLAY_ARENA = 33
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 mapID; // 3 Reference to Map.dbc
|
||||||
|
} play_arena;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_LEARN_SPELL = 34
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 spellID; // 3 Reference to Map.dbc
|
||||||
|
} learn_spell;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_OWN_ITEM = 36
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 itemID; // 3
|
||||||
|
uint32 itemCount; // 4
|
||||||
|
} own_item;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA = 37
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 unused; // 3
|
||||||
|
uint32 count; // 4
|
||||||
|
uint32 flag; // 5 4=in a row
|
||||||
|
} win_rated_arena;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_TEAM_RATING = 38
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 teamtype; // 3 {2,3,5}
|
||||||
|
} highest_team_rating;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_REACH_TEAM_RATING = 39
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 teamtype; // 3 {2,3,5}
|
||||||
|
uint32 teamrating; // 4
|
||||||
|
} reach_team_rating;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LEVEL = 40
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 skillID; // 3
|
||||||
|
uint32 skillLevel; // 4 apprentice=1, journeyman=2, expert=3, artisan=4, master=5, grand master=6
|
||||||
|
} learn_skill_level;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM = 41
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 itemID; // 3
|
||||||
|
uint32 itemCount; // 4
|
||||||
|
} use_item;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_LOOT_ITEM = 42
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 itemID; // 3
|
||||||
|
uint32 itemCount; // 4
|
||||||
|
} loot_item;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_EXPLORE_AREA = 43
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
// TODO: This rank is _NOT_ the index from AreaTable.dbc
|
||||||
|
uint32 areaReference; // 3
|
||||||
|
} explore_area;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_OWN_RANK= 44
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
// TODO: This rank is _NOT_ the index from CharTitles.dbc
|
||||||
|
uint32 rank; // 3
|
||||||
|
} own_rank;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_BUY_BANK_SLOT= 45
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 unused; // 3
|
||||||
|
uint32 numberOfSlots; // 4
|
||||||
|
} buy_bank_slot;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_GAIN_REPUTATION= 46
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 factionID; // 3
|
||||||
|
uint32 reputationAmount; // 4 Total reputation amount, so 42000 = exalted
|
||||||
|
} gain_reputation;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_GAIN_EXALTED_REPUTATION= 47
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 unused; // 3
|
||||||
|
uint32 numberOfExaltedFactions; // 4
|
||||||
|
} gain_exalted_reputation;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM = 49
|
||||||
|
// TODO: where is the required itemlevel stored?
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 itemSlot; // 3
|
||||||
|
} equip_epic_item;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT= 50
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 rollValue; // 3
|
||||||
|
uint32 count; // 4
|
||||||
|
} roll_need_on_loot;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_HK_CLASS = 52
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 classID; // 3
|
||||||
|
uint32 count; // 4
|
||||||
|
} hk_class;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_HK_RACE = 53
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 raceID; // 3
|
||||||
|
uint32 count; // 4
|
||||||
|
} hk_race;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_DO_EMOTE = 54
|
||||||
|
// TODO: where is the information about the target stored?
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 emoteID; // 3
|
||||||
|
} do_emote;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_HEALING_DONE = 55
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 unused; // 3
|
||||||
|
uint32 count; // 4
|
||||||
|
uint32 flag; // 5 =3 for battleground healing
|
||||||
|
uint32 mapid; // 6
|
||||||
|
} healing_done;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_EQUIP_ITEM = 57
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 itemID; // 3
|
||||||
|
} equip_item;
|
||||||
|
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_LOOT_MONEY = 67
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 unused; // 3
|
||||||
|
uint32 goldInCopper; // 4
|
||||||
|
} loot_money;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_USE_GAMEOBJECT = 68
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 goEntry; // 3
|
||||||
|
uint32 useCount; // 4
|
||||||
|
} use_gameobject;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_SPECIAL_PVP_KILL= 70
|
||||||
|
// TODO: are those special criteria stored in the dbc or do we have to add another sql table?
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 unused; // 3
|
||||||
|
uint32 killCount; // 4
|
||||||
|
} special_pvp_kill;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_FISH_IN_GAMEOBJECT = 72
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 goEntry; // 3
|
||||||
|
uint32 lootCount; // 4
|
||||||
|
} fish_in_gameobject;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS= 75
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 skillLine; // 3
|
||||||
|
uint32 spellCount; // 4
|
||||||
|
} learn_skilline_spell;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_WIN_DUEL = 76
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 unused; // 3
|
||||||
|
uint32 duelCount; // 4
|
||||||
|
} win_duel;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_POWER = 96
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 powerType; // 3 mana=0, 1=rage, 3=energy, 6=runic power
|
||||||
|
} highest_power;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_STAT = 97
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 statType; // 3 4=spirit, 3=int, 2=stamina, 1=agi, 0=strength
|
||||||
|
} highest_stat;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_SPELLPOWER = 98
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 spellSchool; // 3
|
||||||
|
} highest_spellpower;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_RATING = 100
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 ratingType; // 3
|
||||||
|
} highest_rating;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE = 109
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 lootType; // 3 3=fishing, 2=pickpocket, 4=disentchant
|
||||||
|
uint32 lootTypeCount; // 4
|
||||||
|
} loot_type;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2 = 110
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 skillLine; // 3
|
||||||
|
uint32 spellCount; // 4
|
||||||
|
} cast_spell2;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LINE= 112
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 skillLine; // 3
|
||||||
|
uint32 spellCount; // 4
|
||||||
|
} learn_skill_line;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_EARN_HONORABLE_KILL = 113
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 unused; // 3
|
||||||
|
uint32 killCount; // 4
|
||||||
|
} honorable_kill;
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 field3; // 3
|
||||||
|
uint32 field4; // 4
|
||||||
|
uint32 field5; // 5
|
||||||
|
uint32 field6; // 6
|
||||||
|
uint32 field7; // 7
|
||||||
|
uint32 field8; // 8
|
||||||
|
} raw;
|
||||||
|
};
|
||||||
|
uint32 completionFlag; // 26
|
||||||
|
uint32 groupFlag; // 27
|
||||||
|
uint32 timeLimit; // 29 time limit in seconds
|
||||||
|
};
|
||||||
|
|
||||||
struct AreaTableEntry
|
struct AreaTableEntry
|
||||||
{
|
{
|
||||||
uint32 ID; // 0
|
uint32 ID; // 0
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,8 @@
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
const char Achievementfmt[]="iiixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiixxixxxxxxxxxxxxxxxxxxx";
|
||||||
|
const char AchievementCriteriafmt[]="iiiiiiiiixxxxxxxxxxxxxxxxxiixix";
|
||||||
const char AreaTableEntryfmt[]="iiinixxxxxissssssssssssssssxixxxxxxx";
|
const char AreaTableEntryfmt[]="iiinixxxxxissssssssssssssssxixxxxxxx";
|
||||||
const char AreaTriggerEntryfmt[]="niffffffff";
|
const char AreaTriggerEntryfmt[]="niffffffff";
|
||||||
const char BankBagSlotPricesEntryfmt[]="ni";
|
const char BankBagSlotPricesEntryfmt[]="ni";
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue