aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Garrison/Garrison.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2015-05-24 02:23:49 +0200
committerShauren <shauren.trinity@gmail.com>2015-05-24 02:23:49 +0200
commitc44273ec9320af1a21a31b3b7b7e59f7869836a1 (patch)
treecf4b3843a95ab3082ece90f7c5a746fbbef6ca10 /src/server/game/Garrison/Garrison.cpp
parent61b0889e6ce27dbce6888298c5a67f9b6a6e5968 (diff)
Core/Achievements: Implemented ACHIEVEMENT_CRITERIA_TYPE_RECRUIT_GARRISON_FOLLOWER
Diffstat (limited to 'src/server/game/Garrison/Garrison.cpp')
-rw-r--r--src/server/game/Garrison/Garrison.cpp39
1 files changed, 28 insertions, 11 deletions
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;
+}