diff options
author | Shauren <shauren.trinity@gmail.com> | 2015-05-24 02:23:49 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2015-05-24 02:23:49 +0200 |
commit | c44273ec9320af1a21a31b3b7b7e59f7869836a1 (patch) | |
tree | cf4b3843a95ab3082ece90f7c5a746fbbef6ca10 /src | |
parent | 61b0889e6ce27dbce6888298c5a67f9b6a6e5968 (diff) |
Core/Achievements: Implemented ACHIEVEMENT_CRITERIA_TYPE_RECRUIT_GARRISON_FOLLOWER
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Achievements/AchievementMgr.cpp | 142 | ||||
-rw-r--r-- | src/server/game/DataStores/DBCEnums.h | 282 | ||||
-rw-r--r-- | src/server/game/DataStores/DBCStructure.h | 18 | ||||
-rw-r--r-- | src/server/game/Garrison/Garrison.cpp | 39 | ||||
-rw-r--r-- | src/server/game/Garrison/Garrison.h | 4 |
5 files changed, 360 insertions, 125 deletions
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index cfe93b0cde3..9c347879768 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -28,6 +28,7 @@ #include "DBCEnums.h" #include "DisableMgr.h" #include "GameEventMgr.h" +#include "Garrison.h" #include "GridNotifiersImpl.h" #include "Group.h" #include "Guild.h" @@ -1161,6 +1162,7 @@ void AchievementMgr<T>::UpdateAchievementCriteria(AchievementCriteriaTypes type, case ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM: case ACHIEVEMENT_CRITERIA_TYPE_EQUIP_ITEM: case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT: + case ACHIEVEMENT_CRITERIA_TYPE_RECRUIT_GARRISON_FOLLOWER: SetCriteriaProgress(achievementCriteria, 1, referencePlayer); break; case ACHIEVEMENT_CRITERIA_TYPE_BUY_BANK_SLOT: @@ -1269,6 +1271,39 @@ void AchievementMgr<T>::UpdateAchievementCriteria(AchievementCriteriaTypes type, case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ARCHAEOLOGY_PROJECTS: case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_GUILD_CHALLENGE_TYPE: case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_GUILD_CHALLENGE: + case ACHIEVEMENT_CRITERIA_TYPE_LFR_DUNGEONS_COMPLETED: + case ACHIEVEMENT_CRITERIA_TYPE_LFR_LEAVES: + case ACHIEVEMENT_CRITERIA_TYPE_LFR_VOTE_KICKS_INITIATED_BY_PLAYER: + case ACHIEVEMENT_CRITERIA_TYPE_LFR_VOTE_KICKS_NOT_INIT_BY_PLAYER: + case ACHIEVEMENT_CRITERIA_TYPE_BE_KICKED_FROM_LFR: + case ACHIEVEMENT_CRITERIA_TYPE_COUNT_OF_LFR_QUEUE_BOOSTS_BY_TANK: + case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_SCENARIO_COUNT: + case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_SCENARIO: + case ACHIEVEMENT_CRITERIA_TYPE_OWN_BATTLE_PET: + case ACHIEVEMENT_CRITERIA_TYPE_OWN_BATTLE_PET_COUNT: + case ACHIEVEMENT_CRITERIA_TYPE_CAPTURE_BATTLE_PET: + case ACHIEVEMENT_CRITERIA_TYPE_WIN_PET_BATTLE: + case ACHIEVEMENT_CRITERIA_TYPE_LEVEL_BATTLE_PET: + case ACHIEVEMENT_CRITERIA_TYPE_CAPTURE_BATTLE_PET_CREDIT: + case ACHIEVEMENT_CRITERIA_TYPE_LEVEL_BATTLE_PET_CREDIT: + case ACHIEVEMENT_CRITERIA_TYPE_ENTER_AREA: + case ACHIEVEMENT_CRITERIA_TYPE_LEAVE_AREA: + case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DUNGEON_ENCOUNTER: + case ACHIEVEMENT_CRITERIA_TYPE_PLACE_GARRISON_BUILDING: + case ACHIEVEMENT_CRITERIA_TYPE_UPGRADE_GARRISON_BUILDING: + case ACHIEVEMENT_CRITERIA_TYPE_CONSTRUCT_GARRISON_BUILDING: + case ACHIEVEMENT_CRITERIA_TYPE_UPGRADE_GARRISON: + case ACHIEVEMENT_CRITERIA_TYPE_START_GARRISON_MISSION: + case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_GARRISON_MISSION_COUNT: + case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_GARRISON_MISSION: + case ACHIEVEMENT_CRITERIA_TYPE_RECRUIT_GARRISON_FOLLOWER_COUNT: + case ACHIEVEMENT_CRITERIA_TYPE_LEARN_GARRISON_BLUEPRINT_COUNT: + case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_GARRISON_SHIPMENT: + case ACHIEVEMENT_CRITERIA_TYPE_RAISE_GARRISON_FOLLOWER_ITEM_LEVEL: + case ACHIEVEMENT_CRITERIA_TYPE_RAISE_GARRISON_FOLLOWER_LEVEL: + case ACHIEVEMENT_CRITERIA_TYPE_OWN_TOY: + case ACHIEVEMENT_CRITERIA_TYPE_OWN_TOY_COUNT: + case ACHIEVEMENT_CRITERIA_TYPE_OWN_HEIRLOOMS: break; // Not implemented yet :( } @@ -1413,6 +1448,7 @@ bool AchievementMgr<T>::IsCompletedCriteria(AchievementCriteria const* achieveme case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST: case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SPELL: case ACHIEVEMENT_CRITERIA_TYPE_EXPLORE_AREA: + case ACHIEVEMENT_CRITERIA_TYPE_RECRUIT_GARRISON_FOLLOWER: return progress->counter >= 1; case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LEVEL: return progress->counter >= (requiredAmount * 75); @@ -2492,6 +2528,44 @@ bool AchievementMgr<T>::AdditionalRequirementsSatisfied(ModifierTreeNode const* if (!unit || unit->GetHealthPct() >= reqValue) return false; break; + case ACHIEVEMENT_CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWER_QUALITY: // 145 + { + if (!referencePlayer) + return false; + Garrison* garrison = referencePlayer->GetGarrison(); + if (!garrison) + return false; + Garrison::Follower const* follower = garrison->GetFollower(miscValue1); + if (!follower || follower->PacketInfo.Quality != reqValue) + return false; + + break; + } + case ACHIEVEMENT_CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWER_LEVEL: // 146 + { + if (!referencePlayer) + return false; + Garrison* garrison = referencePlayer->GetGarrison(); + if (!garrison) + return false; + Garrison::Follower const* follower = garrison->GetFollower(miscValue1); + if (!follower || follower->PacketInfo.FollowerLevel < reqValue) + return false; + + break; + } + case ACHIEVEMENT_CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWER_ILVL: // 184 + { + if (!referencePlayer) + return false; + Garrison* garrison = referencePlayer->GetGarrison(); + if (!garrison) + return false; + Garrison::Follower const* follower = garrison->GetFollower(miscValue1); + if (!follower || follower->GetItemLevel() < reqValue) + return false; + break; + } default: break; } @@ -2729,6 +2803,74 @@ char const* AchievementGlobalMgr::GetCriteriaTypeString(AchievementCriteriaTypes return "GUILD_CHALLENGE_TYPE"; case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_GUILD_CHALLENGE: return "GUILD_CHALLENGE"; + case ACHIEVEMENT_CRITERIA_TYPE_LFR_DUNGEONS_COMPLETED: + return "LFR_DUNGEONS_COMPLETED"; + case ACHIEVEMENT_CRITERIA_TYPE_LFR_LEAVES: + return "LFR_LEAVES"; + case ACHIEVEMENT_CRITERIA_TYPE_LFR_VOTE_KICKS_INITIATED_BY_PLAYER: + return "LFR_VOTE_KICKS_INITIATED_BY_PLAYER"; + case ACHIEVEMENT_CRITERIA_TYPE_LFR_VOTE_KICKS_NOT_INIT_BY_PLAYER: + return "LFR_VOTE_KICKS_NOT_INIT_BY_PLAYER"; + case ACHIEVEMENT_CRITERIA_TYPE_BE_KICKED_FROM_LFR: + return "BE_KICKED_FROM_LFR"; + case ACHIEVEMENT_CRITERIA_TYPE_COUNT_OF_LFR_QUEUE_BOOSTS_BY_TANK: + return "COUNT_OF_LFR_QUEUE_BOOSTS_BY_TANK"; + case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_SCENARIO_COUNT: + return "COMPLETE_SCENARIO_COUNT"; + case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_SCENARIO: + return "COMPLETE_SCENARIO"; + case ACHIEVEMENT_CRITERIA_TYPE_OWN_BATTLE_PET: + return "OWN_BATTLE_PET"; + case ACHIEVEMENT_CRITERIA_TYPE_OWN_BATTLE_PET_COUNT: + return "OWN_BATTLE_PET_COUNT"; + case ACHIEVEMENT_CRITERIA_TYPE_CAPTURE_BATTLE_PET: + return "CAPTURE_BATTLE_PET"; + case ACHIEVEMENT_CRITERIA_TYPE_WIN_PET_BATTLE: + return "WIN_PET_BATTLE"; + case ACHIEVEMENT_CRITERIA_TYPE_LEVEL_BATTLE_PET: + return "LEVEL_BATTLE_PET"; + case ACHIEVEMENT_CRITERIA_TYPE_CAPTURE_BATTLE_PET_CREDIT: + return "CAPTURE_BATTLE_PET_CREDIT"; + case ACHIEVEMENT_CRITERIA_TYPE_LEVEL_BATTLE_PET_CREDIT: + return "LEVEL_BATTLE_PET_CREDIT"; + case ACHIEVEMENT_CRITERIA_TYPE_ENTER_AREA: + return "ENTER_AREA"; + case ACHIEVEMENT_CRITERIA_TYPE_LEAVE_AREA: + return "LEAVE_AREA"; + case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DUNGEON_ENCOUNTER: + return "COMPLETE_DUNGEON_ENCOUNTER"; + case ACHIEVEMENT_CRITERIA_TYPE_PLACE_GARRISON_BUILDING: + return "PLACE_GARRISON_BUILDING"; + case ACHIEVEMENT_CRITERIA_TYPE_UPGRADE_GARRISON_BUILDING: + return "UPGRADE_GARRISON_BUILDING"; + case ACHIEVEMENT_CRITERIA_TYPE_CONSTRUCT_GARRISON_BUILDING: + return "CONSTRUCT_GARRISON_BUILDING"; + case ACHIEVEMENT_CRITERIA_TYPE_UPGRADE_GARRISON: + return "UPGRADE_GARRISON"; + case ACHIEVEMENT_CRITERIA_TYPE_START_GARRISON_MISSION: + return "START_GARRISON_MISSION"; + case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_GARRISON_MISSION_COUNT: + return "COMPLETE_GARRISON_MISSION_COUNT"; + case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_GARRISON_MISSION: + return "COMPLETE_GARRISON_MISSION"; + case ACHIEVEMENT_CRITERIA_TYPE_RECRUIT_GARRISON_FOLLOWER_COUNT: + return "RECRUIT_GARRISON_FOLLOWER_COUNT"; + case ACHIEVEMENT_CRITERIA_TYPE_LEARN_GARRISON_BLUEPRINT_COUNT: + return "LEARN_GARRISON_BLUEPRINT_COUNT"; + case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_GARRISON_SHIPMENT: + return "COMPLETE_GARRISON_SHIPMENT"; + case ACHIEVEMENT_CRITERIA_TYPE_RAISE_GARRISON_FOLLOWER_ITEM_LEVEL: + return "RAISE_GARRISON_FOLLOWER_ITEM_LEVEL"; + case ACHIEVEMENT_CRITERIA_TYPE_RAISE_GARRISON_FOLLOWER_LEVEL: + return "RAISE_GARRISON_FOLLOWER_LEVEL"; + case ACHIEVEMENT_CRITERIA_TYPE_OWN_TOY: + return "OWN_TOY"; + case ACHIEVEMENT_CRITERIA_TYPE_OWN_TOY_COUNT: + return "OWN_TOY_COUNT"; + case ACHIEVEMENT_CRITERIA_TYPE_RECRUIT_GARRISON_FOLLOWER: + return "RECRUIT_GARRISON_FOLLOWER"; + case ACHIEVEMENT_CRITERIA_TYPE_OWN_HEIRLOOMS: + return "OWN_HEIRLOOMS"; } return "MISSING_TYPE"; } diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index fc05f0fdc6a..719e539a9c4 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -159,6 +159,12 @@ enum AchievementCriteriaAdditionalCondition ACHIEVEMENT_CRITERIA_ADDITIONAL_CONDITION_RATED_BATTLEGROUND = 63, // NYI ACHIEVEMENT_CRITERIA_ADDITIONAL_CONDITION_PROJECT_RARITY = 65, ACHIEVEMENT_CRITERIA_ADDITIONAL_CONDITION_PROJECT_RACE = 66, + ACHIEVEMENT_CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWER_QUALITY = 145, + ACHIEVEMENT_CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWER_LEVEL = 146, + ACHIEVEMENT_CRITERIA_ADDITIONAL_CONDITION_GARRISON_RARE_MISSION = 147, // NYI + ACHIEVEMENT_CRITERIA_ADDITIONAL_CONDITION_GARRISON_BUILDING_LEVEL = 149, // NYI + ACHIEVEMENT_CRITERIA_ADDITIONAL_CONDITION_GARRISON_MISSION_TYPE = 167, // NYI + ACHIEVEMENT_CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWER_ILVL = 184, }; enum AchievementCriteriaFlags @@ -188,121 +194,169 @@ enum AchievementCriteriaTimedTypes enum AchievementCriteriaTypes { - ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE = 0, - ACHIEVEMENT_CRITERIA_TYPE_WIN_BG = 1, - ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ARCHAEOLOGY_PROJECTS = 3, // struct { uint32 itemCount; } - ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL = 5, - ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL = 7, - ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT = 8, - ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST_COUNT = 9, - ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST_DAILY = 10, // you have to complete a daily quest x times in a row - ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUESTS_IN_ZONE = 11, - ACHIEVEMENT_CRITERIA_TYPE_CURRENCY = 12, - ACHIEVEMENT_CRITERIA_TYPE_DAMAGE_DONE = 13, - ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST = 14, - ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND = 15, - ACHIEVEMENT_CRITERIA_TYPE_DEATH_AT_MAP = 16, - 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_DEATHS_FROM = 26, - 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, - ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL = 35, - ACHIEVEMENT_CRITERIA_TYPE_OWN_ITEM = 36, - ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA = 37, - ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_TEAM_RATING = 38, - ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_PERSONAL_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, - ACHIEVEMENT_CRITERIA_TYPE_VISIT_BARBER_SHOP = 48, - ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM = 49, - ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT = 50, /// @todo itemlevel is mentioned in text but not present in dbc - ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT = 51, - 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_GET_KILLING_BLOWS = 56, /// @todo in some cases map not present, and in some cases need do without die - ACHIEVEMENT_CRITERIA_TYPE_EQUIP_ITEM = 57, - ACHIEVEMENT_CRITERIA_TYPE_MONEY_FROM_VENDORS = 59, - ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_TALENTS = 60, - ACHIEVEMENT_CRITERIA_TYPE_NUMBER_OF_TALENT_RESETS = 61, - ACHIEVEMENT_CRITERIA_TYPE_MONEY_FROM_QUEST_REWARD = 62, - 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, + ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE = 0, + ACHIEVEMENT_CRITERIA_TYPE_WIN_BG = 1, + ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ARCHAEOLOGY_PROJECTS = 3, // struct { uint32 itemCount; } + ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL = 5, + ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL = 7, + ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT = 8, + ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST_COUNT = 9, + ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST_DAILY = 10, // you have to complete a daily quest x times in a row + ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUESTS_IN_ZONE = 11, + ACHIEVEMENT_CRITERIA_TYPE_CURRENCY = 12, + ACHIEVEMENT_CRITERIA_TYPE_DAMAGE_DONE = 13, + ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST = 14, + ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND = 15, + ACHIEVEMENT_CRITERIA_TYPE_DEATH_AT_MAP = 16, + 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_DEATHS_FROM = 26, + 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, + ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL = 35, + ACHIEVEMENT_CRITERIA_TYPE_OWN_ITEM = 36, + ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA = 37, + ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_TEAM_RATING = 38, + ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_PERSONAL_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, + ACHIEVEMENT_CRITERIA_TYPE_VISIT_BARBER_SHOP = 48, + ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM = 49, + ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT = 50, /// @todo itemlevel is mentioned in text but not present in dbc + ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT = 51, + 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_GET_KILLING_BLOWS = 56, /// @todo in some cases map not present, and in some cases need do without die + ACHIEVEMENT_CRITERIA_TYPE_EQUIP_ITEM = 57, + ACHIEVEMENT_CRITERIA_TYPE_MONEY_FROM_VENDORS = 59, + ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_TALENTS = 60, + ACHIEVEMENT_CRITERIA_TYPE_NUMBER_OF_TALENT_RESETS = 61, + ACHIEVEMENT_CRITERIA_TYPE_MONEY_FROM_QUEST_REWARD = 62, + 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 73: Achievements 1515, 1241, 1103 (Name: Mal'Ganis) - ACHIEVEMENT_CRITERIA_TYPE_ON_LOGIN = 74, - ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS = 75, - ACHIEVEMENT_CRITERIA_TYPE_WIN_DUEL = 76, - ACHIEVEMENT_CRITERIA_TYPE_LOSE_DUEL = 77, - 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_HIT_DEALT = 101, - ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HIT_RECEIVED = 102, - ACHIEVEMENT_CRITERIA_TYPE_TOTAL_DAMAGE_RECEIVED = 103, - ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEAL_CAST = 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, - ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2 = 110, /// @todo target entry is missing - ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LINE = 112, - ACHIEVEMENT_CRITERIA_TYPE_EARN_HONORABLE_KILL = 113, - ACHIEVEMENT_CRITERIA_TYPE_ACCEPTED_SUMMONINGS = 114, - ACHIEVEMENT_CRITERIA_TYPE_EARN_ACHIEVEMENT_POINTS = 115, - ACHIEVEMENT_CRITERIA_TYPE_USE_LFD_TO_GROUP_WITH_PLAYERS = 119, - ACHIEVEMENT_CRITERIA_TYPE_SPENT_GOLD_GUILD_REPAIRS = 124, - ACHIEVEMENT_CRITERIA_TYPE_REACH_GUILD_LEVEL = 125, - ACHIEVEMENT_CRITERIA_TYPE_CRAFT_ITEMS_GUILD = 126, - ACHIEVEMENT_CRITERIA_TYPE_CATCH_FROM_POOL = 127, - ACHIEVEMENT_CRITERIA_TYPE_BUY_GUILD_BANK_SLOTS = 128, - ACHIEVEMENT_CRITERIA_TYPE_EARN_GUILD_ACHIEVEMENT_POINTS = 129, - ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_BATTLEGROUND = 130, - ACHIEVEMENT_CRITERIA_TYPE_REACH_BG_RATING = 132, - ACHIEVEMENT_CRITERIA_TYPE_BUY_GUILD_TABARD = 133, - ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUESTS_GUILD = 134, - ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILLS_GUILD = 135, - ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE_TYPE_GUILD = 136, - ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_GUILD_CHALLENGE_TYPE = 138, //struct { Flag flag; uint32 count; } 1: Guild Dungeon, 2:Guild Challenge, 3:Guild battlefield - ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_GUILD_CHALLENGE = 139 //struct { uint32 count; } Guild Challenge -}; - -#define ACHIEVEMENT_CRITERIA_TYPE_TOTAL 188 + ACHIEVEMENT_CRITERIA_TYPE_ON_LOGIN = 74, + ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS = 75, + ACHIEVEMENT_CRITERIA_TYPE_WIN_DUEL = 76, + ACHIEVEMENT_CRITERIA_TYPE_LOSE_DUEL = 77, + 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_HIT_DEALT = 101, + ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HIT_RECEIVED = 102, + ACHIEVEMENT_CRITERIA_TYPE_TOTAL_DAMAGE_RECEIVED = 103, + ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEAL_CAST = 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, + ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2 = 110, /// @todo target entry is missing + ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LINE = 112, + ACHIEVEMENT_CRITERIA_TYPE_EARN_HONORABLE_KILL = 113, + ACHIEVEMENT_CRITERIA_TYPE_ACCEPTED_SUMMONINGS = 114, + ACHIEVEMENT_CRITERIA_TYPE_EARN_ACHIEVEMENT_POINTS = 115, + ACHIEVEMENT_CRITERIA_TYPE_USE_LFD_TO_GROUP_WITH_PLAYERS = 119, + ACHIEVEMENT_CRITERIA_TYPE_SPENT_GOLD_GUILD_REPAIRS = 124, + ACHIEVEMENT_CRITERIA_TYPE_REACH_GUILD_LEVEL = 125, + ACHIEVEMENT_CRITERIA_TYPE_CRAFT_ITEMS_GUILD = 126, + ACHIEVEMENT_CRITERIA_TYPE_CATCH_FROM_POOL = 127, + ACHIEVEMENT_CRITERIA_TYPE_BUY_GUILD_BANK_SLOTS = 128, + ACHIEVEMENT_CRITERIA_TYPE_EARN_GUILD_ACHIEVEMENT_POINTS = 129, + ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_BATTLEGROUND = 130, + ACHIEVEMENT_CRITERIA_TYPE_REACH_BG_RATING = 132, + ACHIEVEMENT_CRITERIA_TYPE_BUY_GUILD_TABARD = 133, + ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUESTS_GUILD = 134, + ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILLS_GUILD = 135, + ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE_TYPE_GUILD = 136, + ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_GUILD_CHALLENGE_TYPE = 138, //struct { Flag flag; uint32 count; } 1: Guild Dungeon, 2:Guild Challenge, 3:Guild battlefield + ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_GUILD_CHALLENGE = 139, //struct { uint32 count; } Guild Challenge + // 140 unk + // 141 unk + // 142 unk + // 143 unk + // 144 unk + ACHIEVEMENT_CRITERIA_TYPE_LFR_DUNGEONS_COMPLETED = 145, + ACHIEVEMENT_CRITERIA_TYPE_LFR_LEAVES = 146, + ACHIEVEMENT_CRITERIA_TYPE_LFR_VOTE_KICKS_INITIATED_BY_PLAYER = 147, + ACHIEVEMENT_CRITERIA_TYPE_LFR_VOTE_KICKS_NOT_INIT_BY_PLAYER = 148, + ACHIEVEMENT_CRITERIA_TYPE_BE_KICKED_FROM_LFR = 149, + ACHIEVEMENT_CRITERIA_TYPE_COUNT_OF_LFR_QUEUE_BOOSTS_BY_TANK = 150, + ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_SCENARIO_COUNT = 151, + ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_SCENARIO = 152, + // ACHIEVEMENT_CRITERIA_TYPE_REACH_SOMETHING_LIKE_AREATRIGGER = 153, + // 154 + ACHIEVEMENT_CRITERIA_TYPE_OWN_BATTLE_PET = 155, + ACHIEVEMENT_CRITERIA_TYPE_OWN_BATTLE_PET_COUNT = 156, + ACHIEVEMENT_CRITERIA_TYPE_CAPTURE_BATTLE_PET = 157, + ACHIEVEMENT_CRITERIA_TYPE_WIN_PET_BATTLE = 158, + // 159 + ACHIEVEMENT_CRITERIA_TYPE_LEVEL_BATTLE_PET = 160, + ACHIEVEMENT_CRITERIA_TYPE_CAPTURE_BATTLE_PET_CREDIT = 161, // triggers a quest credit + ACHIEVEMENT_CRITERIA_TYPE_LEVEL_BATTLE_PET_CREDIT = 162, // triggers a quest credit + ACHIEVEMENT_CRITERIA_TYPE_ENTER_AREA = 163, // triggers a quest credit + ACHIEVEMENT_CRITERIA_TYPE_LEAVE_AREA = 164, // triggers a quest credit + ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DUNGEON_ENCOUNTER = 165, + ACHIEVEMENT_CRITERIA_TYPE_PLACE_GARRISON_BUILDING = 167, + ACHIEVEMENT_CRITERIA_TYPE_UPGRADE_GARRISON_BUILDING = 168, + ACHIEVEMENT_CRITERIA_TYPE_CONSTRUCT_GARRISON_BUILDING = 169, + ACHIEVEMENT_CRITERIA_TYPE_UPGRADE_GARRISON = 170, + ACHIEVEMENT_CRITERIA_TYPE_START_GARRISON_MISSION = 171, + // 172 + ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_GARRISON_MISSION_COUNT = 173, + ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_GARRISON_MISSION = 174, + ACHIEVEMENT_CRITERIA_TYPE_RECRUIT_GARRISON_FOLLOWER_COUNT = 175, + // 176 + // 177 + ACHIEVEMENT_CRITERIA_TYPE_LEARN_GARRISON_BLUEPRINT_COUNT = 178, + // 179 + // 180 + // 181 + ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_GARRISON_SHIPMENT = 182, + ACHIEVEMENT_CRITERIA_TYPE_RAISE_GARRISON_FOLLOWER_ITEM_LEVEL = 183, + ACHIEVEMENT_CRITERIA_TYPE_RAISE_GARRISON_FOLLOWER_LEVEL = 184, + ACHIEVEMENT_CRITERIA_TYPE_OWN_TOY = 185, + ACHIEVEMENT_CRITERIA_TYPE_OWN_TOY_COUNT = 186, + ACHIEVEMENT_CRITERIA_TYPE_RECRUIT_GARRISON_FOLLOWER = 187, + ACHIEVEMENT_CRITERIA_TYPE_OWN_HEIRLOOMS = 189 +}; + +#define ACHIEVEMENT_CRITERIA_TYPE_TOTAL 190 enum AchievementCriteriaTreeOperator { diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h index 2893ea3df83..8c338f0cd1a 100644 --- a/src/server/game/DataStores/DBCStructure.h +++ b/src/server/game/DataStores/DBCStructure.h @@ -494,12 +494,15 @@ struct CriteriaEntry uint32 ObjectiveId; // ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL_AT_AREA = 31 + // ACHIEVEMENT_CRITERIA_TYPE_ENTER_AREA = 163 + // ACHIEVEMENT_CRITERIA_TYPE_LEAVE_AREA = 164 uint32 AreaID; // ACHIEVEMENT_CRITERIA_TYPE_OWN_ITEM = 36 // ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM = 41 // ACHIEVEMENT_CRITERIA_TYPE_LOOT_ITEM = 42 // ACHIEVEMENT_CRITERIA_TYPE_EQUIP_ITEM = 57 + // ACHIEVEMENT_CRITERIA_TYPE_OWN_TOY = 185 uint32 ItemID; // ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_TEAM_RATING = 38 @@ -544,6 +547,21 @@ struct CriteriaEntry // ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE = 109 uint32 LootType; + + // ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DUNGEON_ENCOUNTER = 165 + uint32 DungeonEncounterID; + + // ACHIEVEMENT_CRITERIA_TYPE_CONSTRUCT_GARRISON_BUILDING = 169 + uint32 GarrBuildingID; + + // ACHIEVEMENT_CRITERIA_TYPE_UPGRADE_GARRISON = 170 + uint32 GarrisonLevel; + + // ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_GARRISON_MISSION = 174 + uint32 GarrMissionID; + + // ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_GARRISON_SHIPMENT = 182 + uint32 CharShipmentContainerID; } Asset; // 2 uint32 StartEvent; // 3 uint32 StartAsset; // 4 diff --git a/src/server/game/Garrison/Garrison.cpp b/src/server/game/Garrison/Garrison.cpp index 8e27bbd930d..c6475183c39 100644 --- a/src/server/game/Garrison/Garrison.cpp +++ b/src/server/game/Garrison/Garrison.cpp @@ -81,17 +81,18 @@ bool Garrison::LoadFromDB(PreparedQueryResult garrison, PreparedQueryResult blue // SELECT dbId, followerId, quality, level, itemLevelWeapon, itemLevelArmor, xp, currentBuilding, currentMission, status FROM character_garrison_followers WHERE guid = ? if (followers) { - std::unordered_map<uint64, Follower*> followersByDbId; do { Field* fields = followers->Fetch(); + uint64 dbId = fields[0].GetUInt64(); uint32 followerId = fields[1].GetUInt32(); if (!sGarrFollowerStore.LookupEntry(followerId)) continue; - Follower& follower = _followers[followerId]; - follower.PacketInfo.DbID = fields[0].GetUInt64(); + _followerIds.insert(followerId); + Follower& follower = _followers[dbId]; + follower.PacketInfo.DbID = dbId; follower.PacketInfo.GarrFollowerID = followerId; follower.PacketInfo.Quality = fields[2].GetUInt32(); follower.PacketInfo.FollowerLevel = fields[3].GetUInt32(); @@ -107,8 +108,6 @@ bool Garrison::LoadFromDB(PreparedQueryResult garrison, PreparedQueryResult blue //if (!sGarrMissionStore.LookupEntry(follower.PacketInfo.CurrentMissionID)) // follower.PacketInfo.CurrentMissionID = 0; - followersByDbId[follower.PacketInfo.DbID] = &follower; - } while (followers->NextRow()); if (abilities) @@ -122,11 +121,11 @@ bool Garrison::LoadFromDB(PreparedQueryResult garrison, PreparedQueryResult blue if (!ability) continue; - auto itr = followersByDbId.find(dbId); - if (itr == followersByDbId.end()) + auto itr = _followers.find(dbId); + if (itr == _followers.end()) continue; - itr->second->PacketInfo.AbilityID.push_back(ability); + itr->second.PacketInfo.AbilityID.push_back(ability); } while (abilities->NextRow()); } } @@ -436,15 +435,17 @@ void Garrison::AddFollower(uint32 garrFollowerId) { WorldPackets::Garrison::GarrisonAddFollowerResult addFollowerResult; GarrFollowerEntry const* followerEntry = sGarrFollowerStore.LookupEntry(garrFollowerId); - if (_followers.count(garrFollowerId) || !followerEntry) + if (_followerIds.count(garrFollowerId) || !followerEntry) { addFollowerResult.Result = GARRISON_GENERIC_UNKNOWN_ERROR; _owner->SendDirectMessage(addFollowerResult.Write()); return; } - Follower& follower = _followers[garrFollowerId]; - follower.PacketInfo.DbID = sGarrisonMgr.GenerateFollowerDbId(); + _followerIds.insert(garrFollowerId); + uint64 dbId = sGarrisonMgr.GenerateFollowerDbId(); + Follower& follower = _followers[dbId]; + follower.PacketInfo.DbID = dbId; follower.PacketInfo.GarrFollowerID = garrFollowerId; follower.PacketInfo.Quality = followerEntry->Quality; // TODO: handle magic upgrades follower.PacketInfo.FollowerLevel = followerEntry->Level; @@ -458,6 +459,17 @@ void Garrison::AddFollower(uint32 garrFollowerId) addFollowerResult.Follower = follower.PacketInfo; _owner->SendDirectMessage(addFollowerResult.Write()); + + _owner->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_RECRUIT_GARRISON_FOLLOWER, follower.PacketInfo.DbID); +} + +Garrison::Follower const* Garrison::GetFollower(uint64 dbId) const +{ + auto itr = _followers.find(dbId); + if (itr != _followers.end()) + return &itr->second; + + return nullptr; } void Garrison::SendInfo() @@ -671,3 +683,8 @@ bool Garrison::Building::CanActivate() const return false; } + +uint32 Garrison::Follower::GetItemLevel() const +{ + return (PacketInfo.ItemLevelWeapon + PacketInfo.ItemLevelArmor) / 2; +} diff --git a/src/server/game/Garrison/Garrison.h b/src/server/game/Garrison/Garrison.h index dc48a43c5cc..71d67a1b6b5 100644 --- a/src/server/game/Garrison/Garrison.h +++ b/src/server/game/Garrison/Garrison.h @@ -100,6 +100,8 @@ public: struct Follower { + uint32 GetItemLevel() const; + WorldPackets::Garrison::GarrisonFollower PacketInfo; }; @@ -130,6 +132,7 @@ public: // Followers void AddFollower(uint32 garrFollowerId); + Follower const* GetFollower(uint64 dbId) const; void SendInfo(); void SendRemoteInfo() const; @@ -150,6 +153,7 @@ private: std::unordered_map<uint32 /*garrPlotInstanceId*/, Plot> _plots; std::unordered_set<uint32 /*garrBuildingId*/> _knownBuildings; std::unordered_map<uint64 /*dbId*/, Follower> _followers; + std::unordered_set<uint32> _followerIds; }; #endif // Garrison_h__ |