mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 04:37:00 +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 \
|
||||
BattleGroundMgr.cpp \
|
||||
BattleGroundMgr.h \
|
||||
Calendar.cpp \
|
||||
Calendar.h \
|
||||
CalendarHandler.cpp \
|
||||
Cell.h \
|
||||
CellImpl.h \
|
||||
Channel.cpp \
|
||||
|
|
|
|||
|
|
@ -6046,6 +6046,23 @@ int ObjectMgr::GetOrNewIndexForLocale( LocaleConstant loc )
|
|||
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()
|
||||
{
|
||||
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, TrainerSpellData> CacheTrainerSpellMap;
|
||||
|
||||
typedef std::list<const AchievementCriteriaEntry*> AchievementCriteriaEntryList;
|
||||
|
||||
enum SkillRangeType
|
||||
{
|
||||
SKILL_RANGE_LANGUAGE, // 300..300
|
||||
|
|
@ -739,6 +741,7 @@ class ObjectMgr
|
|||
void AddVendorItem(uint32 entry,uint32 item, uint32 maxcount, uint32 incrtime, uint32 ExtendedCost);
|
||||
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;
|
||||
void LoadAchievementCriteriaList();
|
||||
protected:
|
||||
uint32 m_auctionid;
|
||||
uint32 m_mailid;
|
||||
|
|
@ -803,6 +806,8 @@ class ObjectMgr
|
|||
int GetOrNewIndexForLocale(LocaleConstant loc);
|
||||
|
||||
int DBCLocaleIndex;
|
||||
|
||||
AchievementCriteriaEntryList const& GetAchievementCriteriaByType(AchievementCriteriaTypes type);
|
||||
private:
|
||||
void LoadScripts(ScriptMapMap& scripts, char const* tablename);
|
||||
void ConvertCreatureAddonAuras(CreatureDataAddon* addon, char const* table, char const* guidEntryStr);
|
||||
|
|
@ -850,6 +855,9 @@ class ObjectMgr
|
|||
CacheNpcTextIdMap m_mCacheNpcTextIdMap;
|
||||
CacheVendorItemMap m_mCacheVendorItemMap;
|
||||
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()
|
||||
|
|
|
|||
|
|
@ -928,6 +928,9 @@ void World::SetInitialWorldSettings()
|
|||
sLog.outString( "Loading InstanceTemplate" );
|
||||
objmgr.LoadInstanceTemplate();
|
||||
|
||||
sLog.outString( "Loading AchievementCriteriaList..." );
|
||||
objmgr.LoadAchievementCriteriaList();
|
||||
|
||||
sLog.outString( "Loading SkillLineAbilityMultiMap Data..." );
|
||||
spellmgr.LoadSkillLineAbilityMap();
|
||||
|
||||
|
|
|
|||
|
|
@ -26,6 +26,138 @@ enum AreaTeams
|
|||
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
|
||||
{
|
||||
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 AreaFlagByMapID sAreaFlagByMapID; // for instances without generated *.map files
|
||||
|
||||
DBCStorage <AchievementEntry> sAchievementStore(Achievementfmt);
|
||||
DBCStorage <AchievementCriteriaEntry> sAchievementCriteriaStore(AchievementCriteriafmt);
|
||||
DBCStorage <AreaTriggerEntry> sAreaTriggerStore(AreaTriggerEntryfmt);
|
||||
DBCStorage <BankBagSlotPricesEntry> sBankBagSlotPricesStore(BankBagSlotPricesEntryfmt);
|
||||
DBCStorage <BattlemasterListEntry> sBattlemasterListStore(BattlemasterListEntryfmt);
|
||||
|
|
@ -182,7 +184,7 @@ void LoadDBCStores(std::string dataPath)
|
|||
{
|
||||
std::string dbcPath = dataPath+"dbc/";
|
||||
|
||||
const uint32 DBCFilesCount = 60;
|
||||
const uint32 DBCFilesCount = 65;
|
||||
|
||||
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,sBankBagSlotPricesStore, dbcPath,"BankBagSlotPrices.dbc");
|
||||
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sBattlemasterListStore, dbcPath,"BattlemasterList.dbc");
|
||||
|
|
|
|||
|
|
@ -129,6 +129,8 @@ class DBCStorage
|
|||
StringPoolList m_stringPoolList;
|
||||
};
|
||||
|
||||
extern DBCStorage <AchievementEntry> sAchievementStore;
|
||||
extern DBCStorage <AchievementCriteriaEntry> sAchievementCriteriaStore;
|
||||
extern DBCStorage <AreaTableEntry> sAreaStore;// recommend access using functions
|
||||
extern DBCStorage <AreaTriggerEntry> sAreaTriggerStore;
|
||||
extern DBCStorage <BankBagSlotPricesEntry> sBankBagSlotPricesStore;
|
||||
|
|
|
|||
|
|
@ -35,6 +35,417 @@
|
|||
#pragma pack(push,1)
|
||||
#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
|
||||
{
|
||||
uint32 ID; // 0
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@
|
|||
* 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 AreaTriggerEntryfmt[]="niffffffff";
|
||||
const char BankBagSlotPricesEntryfmt[]="ni";
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue