using ServerCore; using ServerBase; using ServerCommon; namespace GameServer; internal class BuildingAction : EntityActionBase { public BuildingAction(Building owner) : base(owner) { } public override async Task onInit() { var result = new Result(); return await Task.FromResult(result); } public override void onClear() { return; } public async Task tryLoadBuildingFromDb(int buildingMetaId) { var result = new Result(); var err_msg = string.Empty; var server_logic = GameServerApp.getServerLogic(); var db_client = server_logic.getDynamoDbClient(); var doc = new BuildingDoc(); doc.setCombinationKeyForPK(buildingMetaId.ToString()); var error_code = doc.onApplyPKSK(); if (error_code.isFail()) { err_msg = $"Failed to onApplyPKSK() !!! : {error_code.toBasicString()}"; result.setFail(error_code, err_msg); Log.getLogger().error(result.toBasicString()); return result; } var query_config = db_client.makeQueryConfigForReadByPKSK(doc.getPK()); (result, var read_docs) = await db_client.simpleQueryDocTypesWithQueryOperationConfig(query_config); if (result.isFail()) { err_msg = $"Failed to simpleQueryDocTypesWithQueryOperationConfig() !!! : {result.toBasicString()}"; Log.getLogger().error(err_msg); return result; } var building = getOwner() as Building; NullReferenceCheckHelper.throwIfNull(building, () => $"building is null !!!"); var building_attribute = building.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(building_attribute, () => $"building_attribute is null !!!"); foreach (var read_doc in read_docs) { if (!building_attribute.copyEntityAttributeFromDoc(read_doc)) { err_msg = $"Failed to copyEntityAttributeFromDoc() !!! to:{building_attribute.getTypeName()}, from:{read_doc.getTypeName()} : {this.getTypeName()}"; result.setFail(ServerErrorCode.DynamoDbDocCopyToEntityAttributeFailed, err_msg); Log.getLogger().error(result.toBasicString()); return result; } } if (building_attribute.BuildingMetaId == 0) { (result, var land_meta_data, var rental_fee_meta_data) = BuildingHelper.validCheckBuilding((uint)buildingMetaId); if (result.isFail()) { err_msg = $"Failed to validCheckOwnerLand() !!! : {result.toBasicString()}"; Log.getLogger().error(err_msg); return result; } NullReferenceCheckHelper.throwIfNull(land_meta_data, () => $"land_meta_data is null !!!"); NullReferenceCheckHelper.throwIfNull(rental_fee_meta_data, () => $"rental_fee_meta_data is null !!!"); building_attribute.BuildingMetaId = (uint)buildingMetaId; building_attribute.RentalCurrencyType = (CurrencyType)rental_fee_meta_data.CurrencyType; building_attribute.RentalCurrencyAmount = rental_fee_meta_data.CurrencyValue; building_attribute.IsRentalOpen = land_meta_data.RentalAvailable; if (read_docs.Count != 0) { Log.getLogger().info($"BuildingDoc.BuildingAtrib.BuildingMetaId is 0 !!! - buildingMetaId:{buildingMetaId}"); } } return result; } public async Task<(Result, DynamoDbDocBase?)> modifyBuildingInfo(string buildingName, string buildingDescription, CurrencyType rentalCurrencyType, double rentalCurrencyAmount, bool isRantalOpen) { var result = new Result(); var err_msg = string.Empty; var currency_amount = rentalCurrencyAmount; if (rentalCurrencyType != CurrencyType.Calium) { currency_amount = (int)rentalCurrencyAmount; } var building = getOwner() as Building; NullReferenceCheckHelper.throwIfNull(building, () => $"building is null !!!"); var building_attribute = building.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(building_attribute, () => $"building_attribute is null !!!"); building_attribute.BuildingName = buildingName; building_attribute.Description = buildingDescription; building_attribute.RentalCurrencyType = rentalCurrencyType; building_attribute.RentalCurrencyAmount = currency_amount; building_attribute.IsRentalOpen = isRantalOpen; building_attribute.modifiedEntityAttribute(); (result, var building_doc) = await building_attribute.toDocBase(); if (result.isFail()) { err_msg = $"Failed to toDocBase() !!! : {result.toBasicString()}"; Log.getLogger().error(err_msg); return (result, null); } return (result, building_doc); } public void modifyBuildingInfo(BuildingInfo buildingInfo) { var currency_amount = buildingInfo.RentalCurrencyAmount; if (buildingInfo.RentalCurrencyType != CurrencyType.Calium) { currency_amount = (int)buildingInfo.RentalCurrencyAmount; } var building = getOwner() as Building; NullReferenceCheckHelper.throwIfNull(building, () => $"building is null !!!"); var building_attribute = building.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(building_attribute, () => $"building_attribute is null !!!"); building_attribute.BuildingName = buildingInfo.BuildingName; building_attribute.Description = buildingInfo.BuildingDescription; building_attribute.RentalCurrencyType = buildingInfo.RentalCurrencyType; building_attribute.RentalCurrencyAmount = currency_amount; building_attribute.IsRentalOpen = buildingInfo.IsRentalOpen == BoolType.True; building_attribute.IsLoadFromDb = true; building_attribute.modifiedEntityAttribute(); } public (CurrencyType, double) getRentalCurrency() { var building = getOwner() as Building; NullReferenceCheckHelper.throwIfNull(building, () => $"building is null !!!"); var building_attribute = building.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(building_attribute, () => $"building_attribute is null !!!"); return (building_attribute.RentalCurrencyType, building_attribute.RentalCurrencyAmount); } public void setBuildingOwner(int buildingMetaId, string userGuid, CurrencyType rentalCurrencyType, double rentalCurrencyAmount, bool initialRentalOpen) { var building = getOwner() as Building; NullReferenceCheckHelper.throwIfNull(building, () => $"building is null !!!"); var building_attribute = building.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(building_attribute, () => $"building_attribute is null !!!"); if (!building_attribute.IsLoadFromDb) { building_attribute.BuildingMetaId = (uint)buildingMetaId; building_attribute.OwnerUserGuid = userGuid; building_attribute.RentalCurrencyType = rentalCurrencyType; building_attribute.RentalCurrencyAmount = rentalCurrencyAmount; building_attribute.IsRentalOpen = initialRentalOpen; building_attribute.IsLoadFromDb = true; building_attribute.newEntityAttribute(); } else { building_attribute.OwnerUserGuid = userGuid; building_attribute.modifiedEntityAttribute(); } } public bool isRentalOpen() { var building = getOwner() as Building; NullReferenceCheckHelper.throwIfNull(building, () => $"building is null !!!"); var building_attribute = building.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(building_attribute, () => $"building_attribute is null !!!"); return building_attribute.IsRentalOpen; } public void initOwner() { var building = getOwner() as Building; NullReferenceCheckHelper.throwIfNull(building, () => $"building is null !!!"); var building_attribute = building.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(building_attribute, () => $"building_attribute is null !!!"); building_attribute.OwnerUserGuid = string.Empty; building_attribute.modifiedEntityAttribute(); } public bool isBuildingOwner(string userGuid) { var building = getOwner() as Building; NullReferenceCheckHelper.throwIfNull(building, () => $"building is null !!!"); var building_attribute = building.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(building_attribute, () => $"building_attribute is null !!!"); return building_attribute.OwnerUserGuid == userGuid; } public bool isLoadFromDb() { var building = getOwner() as Building; NullReferenceCheckHelper.throwIfNull(building, () => $"building is null !!!"); var building_attribute = building.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(building_attribute, () => $"building_attribute is null !!!"); return building_attribute.IsLoadFromDb; } }