Core/Garrison: Add more functions to get garrison data
Port From (https://github.com/TrinityCore/TrinityCore/commit/36d6959ae6a945408d32a62390ae14e6f956dde2)
This commit is contained in:
@@ -301,6 +301,9 @@ namespace Game.Garrisons
|
|||||||
return _owner.GetTeam() == Team.Horde ? GarrisonFactionIndex.Horde : GarrisonFactionIndex.Alliance;
|
return _owner.GetTeam() == Team.Horde ? GarrisonFactionIndex.Horde : GarrisonFactionIndex.Alliance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GarrisonType GetGarrisonType() { return GarrisonType.Garrison; }
|
||||||
|
GarrSiteLevelRecord GetSiteLevel() { return _siteLevel; }
|
||||||
|
|
||||||
public ICollection<Plot> GetPlots()
|
public ICollection<Plot> GetPlots()
|
||||||
{
|
{
|
||||||
return _plots.Values;
|
return _plots.Values;
|
||||||
@@ -311,16 +314,18 @@ namespace Game.Garrisons
|
|||||||
return _plots.LookupByKey(garrPlotInstanceId);
|
return _plots.LookupByKey(garrPlotInstanceId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool HasBlueprint(uint garrBuildingId) { return _knownBuildings.Contains(garrBuildingId); }
|
||||||
|
|
||||||
public void LearnBlueprint(uint garrBuildingId)
|
public void LearnBlueprint(uint garrBuildingId)
|
||||||
{
|
{
|
||||||
GarrisonLearnBlueprintResult learnBlueprintResult = new GarrisonLearnBlueprintResult();
|
GarrisonLearnBlueprintResult learnBlueprintResult = new GarrisonLearnBlueprintResult();
|
||||||
learnBlueprintResult.GarrTypeID = GarrisonType.Garrison;
|
learnBlueprintResult.GarrTypeID = GetGarrisonType();
|
||||||
learnBlueprintResult.BuildingID = garrBuildingId;
|
learnBlueprintResult.BuildingID = garrBuildingId;
|
||||||
learnBlueprintResult.Result = GarrisonError.Success;
|
learnBlueprintResult.Result = GarrisonError.Success;
|
||||||
|
|
||||||
if (!CliDB.GarrBuildingStorage.ContainsKey(garrBuildingId))
|
if (!CliDB.GarrBuildingStorage.ContainsKey(garrBuildingId))
|
||||||
learnBlueprintResult.Result = GarrisonError.InvalidBuildingId;
|
learnBlueprintResult.Result = GarrisonError.InvalidBuildingId;
|
||||||
else if (_knownBuildings.Contains(garrBuildingId))
|
else if (HasBlueprint(garrBuildingId))
|
||||||
learnBlueprintResult.Result = GarrisonError.BlueprintExists;
|
learnBlueprintResult.Result = GarrisonError.BlueprintExists;
|
||||||
else
|
else
|
||||||
_knownBuildings.Add(garrBuildingId);
|
_knownBuildings.Add(garrBuildingId);
|
||||||
@@ -331,13 +336,13 @@ namespace Game.Garrisons
|
|||||||
void UnlearnBlueprint(uint garrBuildingId)
|
void UnlearnBlueprint(uint garrBuildingId)
|
||||||
{
|
{
|
||||||
GarrisonUnlearnBlueprintResult unlearnBlueprintResult = new GarrisonUnlearnBlueprintResult();
|
GarrisonUnlearnBlueprintResult unlearnBlueprintResult = new GarrisonUnlearnBlueprintResult();
|
||||||
unlearnBlueprintResult.GarrTypeID = GarrisonType.Garrison;
|
unlearnBlueprintResult.GarrTypeID = GetGarrisonType();
|
||||||
unlearnBlueprintResult.BuildingID = garrBuildingId;
|
unlearnBlueprintResult.BuildingID = garrBuildingId;
|
||||||
unlearnBlueprintResult.Result = GarrisonError.Success;
|
unlearnBlueprintResult.Result = GarrisonError.Success;
|
||||||
|
|
||||||
if (!CliDB.GarrBuildingStorage.ContainsKey(garrBuildingId))
|
if (!CliDB.GarrBuildingStorage.ContainsKey(garrBuildingId))
|
||||||
unlearnBlueprintResult.Result = GarrisonError.InvalidBuildingId;
|
unlearnBlueprintResult.Result = GarrisonError.InvalidBuildingId;
|
||||||
else if (!_knownBuildings.Contains(garrBuildingId))
|
else if (HasBlueprint(garrBuildingId))
|
||||||
unlearnBlueprintResult.Result = GarrisonError.RequiresBlueprint;
|
unlearnBlueprintResult.Result = GarrisonError.RequiresBlueprint;
|
||||||
else
|
else
|
||||||
_knownBuildings.Remove(garrBuildingId);
|
_knownBuildings.Remove(garrBuildingId);
|
||||||
@@ -348,7 +353,7 @@ namespace Game.Garrisons
|
|||||||
public void PlaceBuilding(uint garrPlotInstanceId, uint garrBuildingId)
|
public void PlaceBuilding(uint garrPlotInstanceId, uint garrBuildingId)
|
||||||
{
|
{
|
||||||
GarrisonPlaceBuildingResult placeBuildingResult = new GarrisonPlaceBuildingResult();
|
GarrisonPlaceBuildingResult placeBuildingResult = new GarrisonPlaceBuildingResult();
|
||||||
placeBuildingResult.GarrTypeID = GarrisonType.Garrison;
|
placeBuildingResult.GarrTypeID = GetGarrisonType();
|
||||||
placeBuildingResult.Result = CheckBuildingPlacement(garrPlotInstanceId, garrBuildingId);
|
placeBuildingResult.Result = CheckBuildingPlacement(garrPlotInstanceId, garrBuildingId);
|
||||||
if (placeBuildingResult.Result == GarrisonError.Success)
|
if (placeBuildingResult.Result == GarrisonError.Success)
|
||||||
{
|
{
|
||||||
@@ -367,7 +372,7 @@ namespace Game.Garrisons
|
|||||||
{
|
{
|
||||||
oldBuildingId = plot.BuildingInfo.PacketInfo.Value.GarrBuildingID;
|
oldBuildingId = plot.BuildingInfo.PacketInfo.Value.GarrBuildingID;
|
||||||
if (CliDB.GarrBuildingStorage.LookupByKey(oldBuildingId).BuildingType != building.BuildingType)
|
if (CliDB.GarrBuildingStorage.LookupByKey(oldBuildingId).BuildingType != building.BuildingType)
|
||||||
plot.ClearBuildingInfo(_owner);
|
plot.ClearBuildingInfo(GetGarrisonType(), _owner);
|
||||||
}
|
}
|
||||||
|
|
||||||
plot.SetBuildingInfo(placeBuildingResult.BuildingInfo, _owner);
|
plot.SetBuildingInfo(placeBuildingResult.BuildingInfo, _owner);
|
||||||
@@ -384,7 +389,7 @@ namespace Game.Garrisons
|
|||||||
if (oldBuildingId != 0)
|
if (oldBuildingId != 0)
|
||||||
{
|
{
|
||||||
GarrisonBuildingRemoved buildingRemoved = new GarrisonBuildingRemoved();
|
GarrisonBuildingRemoved buildingRemoved = new GarrisonBuildingRemoved();
|
||||||
buildingRemoved.GarrTypeID = GarrisonType.Garrison;
|
buildingRemoved.GarrTypeID = GetGarrisonType();
|
||||||
buildingRemoved.Result = GarrisonError.Success;
|
buildingRemoved.Result = GarrisonError.Success;
|
||||||
buildingRemoved.GarrPlotInstanceID = garrPlotInstanceId;
|
buildingRemoved.GarrPlotInstanceID = garrPlotInstanceId;
|
||||||
buildingRemoved.GarrBuildingID = oldBuildingId;
|
buildingRemoved.GarrBuildingID = oldBuildingId;
|
||||||
@@ -400,7 +405,7 @@ namespace Game.Garrisons
|
|||||||
public void CancelBuildingConstruction(uint garrPlotInstanceId)
|
public void CancelBuildingConstruction(uint garrPlotInstanceId)
|
||||||
{
|
{
|
||||||
GarrisonBuildingRemoved buildingRemoved = new GarrisonBuildingRemoved();
|
GarrisonBuildingRemoved buildingRemoved = new GarrisonBuildingRemoved();
|
||||||
buildingRemoved.GarrTypeID = GarrisonType.Garrison;
|
buildingRemoved.GarrTypeID = GetGarrisonType();
|
||||||
buildingRemoved.Result = CheckBuildingRemoval(garrPlotInstanceId);
|
buildingRemoved.Result = CheckBuildingRemoval(garrPlotInstanceId);
|
||||||
if (buildingRemoved.Result == GarrisonError.Success)
|
if (buildingRemoved.Result == GarrisonError.Success)
|
||||||
{
|
{
|
||||||
@@ -413,7 +418,7 @@ namespace Game.Garrisons
|
|||||||
if (map)
|
if (map)
|
||||||
plot.DeleteGameObject(map);
|
plot.DeleteGameObject(map);
|
||||||
|
|
||||||
plot.ClearBuildingInfo(_owner);
|
plot.ClearBuildingInfo(GetGarrisonType(), _owner);
|
||||||
_owner.SendPacket(buildingRemoved);
|
_owner.SendPacket(buildingRemoved);
|
||||||
|
|
||||||
GarrBuildingRecord constructing = CliDB.GarrBuildingStorage.LookupByKey(buildingRemoved.GarrBuildingID);
|
GarrBuildingRecord constructing = CliDB.GarrBuildingStorage.LookupByKey(buildingRemoved.GarrBuildingID);
|
||||||
@@ -428,7 +433,7 @@ namespace Game.Garrisons
|
|||||||
Cypher.Assert(restored != 0);
|
Cypher.Assert(restored != 0);
|
||||||
|
|
||||||
GarrisonPlaceBuildingResult placeBuildingResult = new GarrisonPlaceBuildingResult();
|
GarrisonPlaceBuildingResult placeBuildingResult = new GarrisonPlaceBuildingResult();
|
||||||
placeBuildingResult.GarrTypeID = GarrisonType.Garrison;
|
placeBuildingResult.GarrTypeID = GetGarrisonType();
|
||||||
placeBuildingResult.Result = GarrisonError.Success;
|
placeBuildingResult.Result = GarrisonError.Success;
|
||||||
placeBuildingResult.BuildingInfo.GarrPlotInstanceID = garrPlotInstanceId;
|
placeBuildingResult.BuildingInfo.GarrPlotInstanceID = garrPlotInstanceId;
|
||||||
placeBuildingResult.BuildingInfo.GarrBuildingID = restored;
|
placeBuildingResult.BuildingInfo.GarrBuildingID = restored;
|
||||||
@@ -477,7 +482,7 @@ namespace Game.Garrisons
|
|||||||
public void AddFollower(uint garrFollowerId)
|
public void AddFollower(uint garrFollowerId)
|
||||||
{
|
{
|
||||||
GarrisonAddFollowerResult addFollowerResult = new GarrisonAddFollowerResult();
|
GarrisonAddFollowerResult addFollowerResult = new GarrisonAddFollowerResult();
|
||||||
addFollowerResult.GarrTypeID = GarrisonType.Garrison;
|
addFollowerResult.GarrTypeID = GetGarrisonType();
|
||||||
GarrFollowerRecord followerEntry = CliDB.GarrFollowerStorage.LookupByKey(garrFollowerId);
|
GarrFollowerRecord followerEntry = CliDB.GarrFollowerStorage.LookupByKey(garrFollowerId);
|
||||||
if (_followerIds.Contains(garrFollowerId) || followerEntry == null)
|
if (_followerIds.Contains(garrFollowerId) || followerEntry == null)
|
||||||
{
|
{
|
||||||
@@ -514,13 +519,23 @@ namespace Game.Garrisons
|
|||||||
return _followers.LookupByKey(dbId);
|
return _followers.LookupByKey(dbId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint CountFollowers(Predicate<Follower> predicate)
|
||||||
|
{
|
||||||
|
uint count = 0;
|
||||||
|
foreach (var pair in _followers)
|
||||||
|
if (predicate(pair.Value))
|
||||||
|
++count;
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
public void SendInfo()
|
public void SendInfo()
|
||||||
{
|
{
|
||||||
GetGarrisonInfoResult garrisonInfo = new GetGarrisonInfoResult();
|
GetGarrisonInfoResult garrisonInfo = new GetGarrisonInfoResult();
|
||||||
garrisonInfo.FactionIndex = GetFaction();
|
garrisonInfo.FactionIndex = GetFaction();
|
||||||
|
|
||||||
GarrisonInfo garrison = new GarrisonInfo();
|
GarrisonInfo garrison = new GarrisonInfo();
|
||||||
garrison.GarrTypeID = GarrisonType.Garrison;
|
garrison.GarrTypeID = GetGarrisonType();
|
||||||
garrison.GarrSiteID = _siteLevel.GarrSiteID;
|
garrison.GarrSiteID = _siteLevel.GarrSiteID;
|
||||||
garrison.GarrSiteLevelID = _siteLevel.Id;
|
garrison.GarrSiteLevelID = _siteLevel.Id;
|
||||||
garrison.NumFollowerActivationsRemaining = _followerActivationsRemainingToday;
|
garrison.NumFollowerActivationsRemaining = _followerActivationsRemainingToday;
|
||||||
@@ -560,7 +575,7 @@ namespace Game.Garrisons
|
|||||||
public void SendBlueprintAndSpecializationData()
|
public void SendBlueprintAndSpecializationData()
|
||||||
{
|
{
|
||||||
GarrisonRequestBlueprintAndSpecializationDataResult data = new GarrisonRequestBlueprintAndSpecializationDataResult();
|
GarrisonRequestBlueprintAndSpecializationDataResult data = new GarrisonRequestBlueprintAndSpecializationDataResult();
|
||||||
data.GarrTypeID = GarrisonType.Garrison;
|
data.GarrTypeID = GetGarrisonType();
|
||||||
data.BlueprintsKnown = _knownBuildings;
|
data.BlueprintsKnown = _knownBuildings;
|
||||||
_owner.SendPacket(data);
|
_owner.SendPacket(data);
|
||||||
}
|
}
|
||||||
@@ -607,7 +622,7 @@ namespace Game.Garrisons
|
|||||||
|
|
||||||
if (building.Flags.HasAnyFlag(GarrisonBuildingFlags.NeedsPlan))
|
if (building.Flags.HasAnyFlag(GarrisonBuildingFlags.NeedsPlan))
|
||||||
{
|
{
|
||||||
if (!_knownBuildings.Contains(garrBuildingId))
|
if (HasBlueprint(garrBuildingId))
|
||||||
return GarrisonError.RequiresBlueprint;
|
return GarrisonError.RequiresBlueprint;
|
||||||
}
|
}
|
||||||
else // Building is built as a quest reward
|
else // Building is built as a quest reward
|
||||||
@@ -790,10 +805,10 @@ namespace Game.Garrisons
|
|||||||
BuildingInfo.Guid.Clear();
|
BuildingInfo.Guid.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ClearBuildingInfo(Player owner)
|
public void ClearBuildingInfo(GarrisonType garrisonType, Player owner)
|
||||||
{
|
{
|
||||||
GarrisonPlotPlaced plotPlaced = new GarrisonPlotPlaced();
|
GarrisonPlotPlaced plotPlaced = new GarrisonPlotPlaced();
|
||||||
plotPlaced.GarrTypeID = GarrisonType.Garrison;
|
plotPlaced.GarrTypeID = garrisonType;
|
||||||
plotPlaced.PlotInfo = PacketInfo;
|
plotPlaced.PlotInfo = PacketInfo;
|
||||||
owner.SendPacket(plotPlaced);
|
owner.SendPacket(plotPlaced);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user