public void CancelBuildingConstruction(uint garrPlotInstanceId) { GarrisonBuildingRemoved buildingRemoved = new GarrisonBuildingRemoved(); buildingRemoved.GarrTypeID = GetGarrisonType(); buildingRemoved.Result = CheckBuildingRemoval(garrPlotInstanceId); if (buildingRemoved.Result == GarrisonError.Success) { Plot plot = GetPlot(garrPlotInstanceId); buildingRemoved.GarrPlotInstanceID = garrPlotInstanceId; buildingRemoved.GarrBuildingID = plot.BuildingInfo.PacketInfo.Value.GarrBuildingID; Map map = FindMap(); if (map) { plot.DeleteGameObject(map); } plot.ClearBuildingInfo(GetGarrisonType(), _owner); _owner.SendPacket(buildingRemoved); GarrBuildingRecord constructing = CliDB.GarrBuildingStorage.LookupByKey(buildingRemoved.GarrBuildingID); // Refund construction/upgrade cost _owner.ModifyCurrency((CurrencyTypes)constructing.CurrencyTypeID, constructing.CurrencyQty, false, true); _owner.ModifyMoney(constructing.GoldCost * MoneyConstants.Gold, false); if (constructing.UpgradeLevel > 1) { // Restore previous level building uint restored = Global.GarrisonMgr.GetPreviousLevelBuilding(constructing.BuildingType, constructing.UpgradeLevel); Cypher.Assert(restored != 0); GarrisonPlaceBuildingResult placeBuildingResult = new GarrisonPlaceBuildingResult(); placeBuildingResult.GarrTypeID = GetGarrisonType(); placeBuildingResult.Result = GarrisonError.Success; placeBuildingResult.BuildingInfo.GarrPlotInstanceID = garrPlotInstanceId; placeBuildingResult.BuildingInfo.GarrBuildingID = restored; placeBuildingResult.BuildingInfo.TimeBuilt = Time.UnixTime; placeBuildingResult.BuildingInfo.Active = true; plot.SetBuildingInfo(placeBuildingResult.BuildingInfo, _owner); _owner.SendPacket(placeBuildingResult); } if (map) { GameObject go = plot.CreateGameObject(map, GetFaction()); if (go) { map.AddToMap(go); } } } else { _owner.SendPacket(buildingRemoved); } }
public void PlaceBuilding(uint garrPlotInstanceId, uint garrBuildingId) { GarrisonPlaceBuildingResult placeBuildingResult = new GarrisonPlaceBuildingResult(); placeBuildingResult.GarrTypeID = GetGarrisonType(); placeBuildingResult.Result = CheckBuildingPlacement(garrPlotInstanceId, garrBuildingId); if (placeBuildingResult.Result == GarrisonError.Success) { placeBuildingResult.BuildingInfo.GarrPlotInstanceID = garrPlotInstanceId; placeBuildingResult.BuildingInfo.GarrBuildingID = garrBuildingId; placeBuildingResult.BuildingInfo.TimeBuilt = Time.UnixTime; Plot plot = GetPlot(garrPlotInstanceId); uint oldBuildingId = 0; Map map = FindMap(); GarrBuildingRecord building = CliDB.GarrBuildingStorage.LookupByKey(garrBuildingId); if (map) { plot.DeleteGameObject(map); } if (plot.BuildingInfo.PacketInfo.HasValue) { oldBuildingId = plot.BuildingInfo.PacketInfo.Value.GarrBuildingID; if (CliDB.GarrBuildingStorage.LookupByKey(oldBuildingId).BuildingType != building.BuildingType) { plot.ClearBuildingInfo(GetGarrisonType(), _owner); } } plot.SetBuildingInfo(placeBuildingResult.BuildingInfo, _owner); if (map) { GameObject go = plot.CreateGameObject(map, GetFaction()); if (go) { map.AddToMap(go); } } _owner.ModifyCurrency((CurrencyTypes)building.CurrencyTypeID, -building.CurrencyQty, false, true); _owner.ModifyMoney(-building.GoldCost * MoneyConstants.Gold, false); if (oldBuildingId != 0) { GarrisonBuildingRemoved buildingRemoved = new GarrisonBuildingRemoved(); buildingRemoved.GarrTypeID = GetGarrisonType(); buildingRemoved.Result = GarrisonError.Success; buildingRemoved.GarrPlotInstanceID = garrPlotInstanceId; buildingRemoved.GarrBuildingID = oldBuildingId; _owner.SendPacket(buildingRemoved); } _owner.UpdateCriteria(CriteriaTypes.PlaceGarrisonBuilding, garrBuildingId); } _owner.SendPacket(placeBuildingResult); }