bool Garrison::Create(uint32 garrSiteId) { _siteLevel = sGarrisonMgr.GetGarrSiteLevelEntry(garrSiteId, 1); if (!_siteLevel) return false; InitializePlots(); WorldPackets::Garrison::GarrisonCreateResult garrisonCreateResult; garrisonCreateResult.GarrSiteLevelID = _siteLevel->ID; _owner->SendDirectMessage(garrisonCreateResult.Write()); _owner->SendUpdatePhasing(); SendRemoteInfo(); return true; }
bool Garrison::LoadFromDB(PreparedQueryResult garrison, PreparedQueryResult blueprints, PreparedQueryResult buildings, PreparedQueryResult followers, PreparedQueryResult abilities) { if (!garrison) return false; Field* fields = garrison->Fetch(); _siteLevel = sGarrSiteLevelStore.LookupEntry(fields[0].GetUInt32()); _followerActivationsRemainingToday = fields[1].GetUInt32(); if (!_siteLevel) return false; InitializePlots(); if (blueprints) { do { fields = blueprints->Fetch(); if (GarrBuildingEntry const* building = sGarrBuildingStore.LookupEntry(fields[0].GetUInt32())) _knownBuildings.insert(building->ID); } while (blueprints->NextRow()); } if (buildings) { do { fields = buildings->Fetch(); uint32 plotInstanceId = fields[0].GetUInt32(); uint32 buildingId = fields[1].GetUInt32(); time_t timeBuilt = time_t(fields[2].GetUInt64()); bool active = fields[3].GetBool(); Plot* plot = GetPlot(plotInstanceId); if (!plot) continue; if (!sGarrBuildingStore.LookupEntry(buildingId)) continue; plot->BuildingInfo.PacketInfo = boost::in_place(); plot->BuildingInfo.PacketInfo->GarrPlotInstanceID = plotInstanceId; plot->BuildingInfo.PacketInfo->GarrBuildingID = buildingId; plot->BuildingInfo.PacketInfo->TimeBuilt = timeBuilt; plot->BuildingInfo.PacketInfo->Active = active; } while (buildings->NextRow()); } // 0 1 2 3 4 5 6 7 8 9 // SELECT dbId, followerId, quality, level, itemLevelWeapon, itemLevelArmor, xp, currentBuilding, currentMission, status FROM character_garrison_followers WHERE guid = ? if (followers) { do { fields = followers->Fetch(); uint64 dbId = fields[0].GetUInt64(); uint32 followerId = fields[1].GetUInt32(); if (!sGarrFollowerStore.LookupEntry(followerId)) continue; _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(); follower.PacketInfo.ItemLevelWeapon = fields[4].GetUInt32(); follower.PacketInfo.ItemLevelArmor = fields[5].GetUInt32(); follower.PacketInfo.Xp = fields[6].GetUInt32(); follower.PacketInfo.CurrentBuildingID = fields[7].GetUInt32(); follower.PacketInfo.CurrentMissionID = fields[8].GetUInt32(); follower.PacketInfo.FollowerStatus = fields[9].GetUInt32(); if (!sGarrBuildingStore.LookupEntry(follower.PacketInfo.CurrentBuildingID)) follower.PacketInfo.CurrentBuildingID = 0; //if (!sGarrMissionStore.LookupEntry(follower.PacketInfo.CurrentMissionID)) // follower.PacketInfo.CurrentMissionID = 0; } while (followers->NextRow()); if (abilities) { do { fields = abilities->Fetch(); uint64 dbId = fields[0].GetUInt64(); GarrAbilityEntry const* ability = sGarrAbilityStore.LookupEntry(fields[1].GetUInt32()); if (!ability) continue; auto itr = _followers.find(dbId); if (itr == _followers.end()) continue; itr->second.PacketInfo.AbilityID.push_back(ability); } while (abilities->NextRow()); } } return true; }