using ServerCore; using ServerBase; using ServerCommon; using ServerCommon.BusinessLogDomain; using static ClientToGameRes.Types; namespace GameServer; internal class MyhomeAction : EntityActionBase { public MyhomeAction(Myhome owner) : base(owner) { } public override async Task onInit() { await Task.CompletedTask; var result = new Result(); return result; } public override void onClear() { return; } public MyHomeInfo toMyHomeInfo() { var myhome_attribute = getOwner().getEntityAttribute(); ArgumentNullException.ThrowIfNull(myhome_attribute); var myhome_info = myhome_attribute.toMyhomeInfo(); return myhome_info; } public MyhomeUgcInfo getMyhomeUgcInfo() { var myhome_attribute = getOwner().getEntityAttribute(); ArgumentNullException.ThrowIfNull(myhome_attribute); return myhome_attribute.UgcInfo; } public void selectMyHome() { var myhome_attribute = getOwner().getEntityAttribute(); ArgumentNullException.ThrowIfNull(myhome_attribute); myhome_attribute.SelectedFlag = 1; myhome_attribute.modifiedEntityAttribute(); } public void unselectMyHome() { var myhome_attribute = getOwner().getEntityAttribute(); ArgumentNullException.ThrowIfNull(myhome_attribute); myhome_attribute.SelectedFlag = 0; myhome_attribute.modifiedEntityAttribute(); } public void renameMyhome(string newMyhomeName) { var myhome_attribute = getOwner().getEntityAttribute(); ArgumentNullException.ThrowIfNull(myhome_attribute); myhome_attribute.MyhomeName = newMyhomeName; myhome_attribute.modifiedEntityAttribute(); } public async Task tryMakeDefaultMyhome(MyhomeUgcInfo myhomeUgcInfo) { var result = new Result(); var err_msg = string.Empty; var owner = getOwner() as Myhome; ArgumentNullException.ThrowIfNull(owner); result = await tryMakeDefaultInteriorItems(myhomeUgcInfo); if (result.isFail()) { return result; } var myhome_attribute = owner.getEntityAttribute(); ArgumentNullException.ThrowIfNull(myhome_attribute); myhome_attribute.MyhomeMetaId = (uint)myhomeUgcInfo.RoomType; myhome_attribute.SelectedFlag = 1; myhome_attribute.MyhomeUgcInfoS3FileName = MyhomeHelper.makeMyhomeUgcInfoS3FileName(); myhome_attribute.UgcInfo = myhomeUgcInfo; myhome_attribute.newEntityAttribute(); return result; } public async Task<(Result, GS2C_ACK_SAVE_MYHOME_UGC, List?)> trySaveMyhomeUgcInfo(string myhomeName, MyhomeUgcInfo myhomeUgcInfo) { var result = new Result(); var err_msg = string.Empty; var res = new GS2C_ACK_SAVE_MYHOME_UGC(); var business_logs = new List(); var myhome = getOwner() as Myhome; ArgumentNullException.ThrowIfNull(myhome, $"owner is null !!!"); var player = myhome.onGetMasterEntity() as Player; ArgumentNullException.ThrowIfNull(player, $"player is null !!!"); result = checkBeforeSaveMyhome(myhomeName, myhomeUgcInfo); if (result.isFail()) { err_msg = $"Failed to checkBeforeSaveMyhome() !!! : {result.toBasicString()}"; Log.getLogger().error(err_msg); return (result, res, null); } (result, var changedUgcItemGuids) = await tryRelocateInteriorItems(myhomeUgcInfo); if (result.isFail()) { err_msg = $"Failed to tryRelocateInteriorItems() !!! : {result.toBasicString()}"; Log.getLogger().error(err_msg); return (result, res, null); } modifyMyhomeUgcInfo(myhomeUgcInfo, changedUgcItemGuids); (result, var modify_ugc_npc_state_infos) = await tryRelocateUgcNpcs(myhomeUgcInfo); if (result.isFail()) { err_msg = $"Failed to tryRelocateUgcNpcs() !!! : {result.toBasicString()} - {myhome.toBasicString()}"; Log.getLogger().error(err_msg); return (result, res, null); } var myhome_attribute = myhome.getEntityAttribute(); ArgumentNullException.ThrowIfNull(myhome_attribute); myhome_attribute.MyhomeName = myhomeName; myhome_attribute.MyhomeUgcInfoS3FileName = MyhomeHelper.makeMyhomeUgcInfoS3FileName(); myhome_attribute.UgcInfo = myhomeUgcInfo; myhome_attribute.modifiedEntityAttribute(); res.MyhomeGuid = myhome_attribute.MyhomeGuid; res.MyhomeName = myhome_attribute.MyhomeName; res.MyhomeUgcInfo = myhome_attribute.UgcInfo; NullReferenceCheckHelper.throwIfNull(modify_ugc_npc_state_infos, () => $"modify_ugc_npc_state_infos is null !!!"); foreach (var (key, value) in modify_ugc_npc_state_infos) { res.ModigyUgcNpcStateInfos.Add(key, value); } var myhome_log_info = MyHomeBusinessLogHelper.toMyHomeLogInfo(myhome_attribute); var myhome_business_log = new MyHomeBusinessLog(myhome_log_info); business_logs.Add(myhome_business_log); return (result, res, business_logs); } Result checkBeforeSaveMyhome(string myhomeName, MyhomeUgcInfo myhomeUgcInfo) { var result = new Result(); var err_msg = string.Empty; var myhome = getOwner() as Myhome; ArgumentNullException.ThrowIfNull(myhome, $"owner is null !!!"); var player = myhome.onGetMasterEntity() as Player; ArgumentNullException.ThrowIfNull(player, $"player is null !!!"); result = MyhomeHelper.checkMyhomeName(myhomeName); if (result.isFail()) { err_msg = $"Failed to checkMyhomeName() !!! : {result.toBasicString()} - {myhome.toBasicString()}, {player.toBasicString()}"; Log.getLogger().error(err_msg); return result; } result = MyhomeHelper.checkMyhomeUgcInfo(myhomeUgcInfo); if (result.isFail()) { err_msg = $"Failed to checkMyhomeInteriorPoint() !!! : {result.toBasicString()} - {myhome.toBasicString()}, {player.toBasicString()}"; Log.getLogger().error(err_msg); return result; } var current_myhome_ugc_info = getMyhomeUgcInfo(); (_, var remove_crafter_anchor_guids) = MyhomeHelper.getModifyCrafterAnchorGuids(current_myhome_ugc_info, myhomeUgcInfo); result = CraftHelper.checkAnchorCrafting(player, remove_crafter_anchor_guids); if (result.isFail()) { err_msg = $"Failed to checkCraftingProcess() !!! : {result.toBasicString()} - {myhome.toBasicString()}, {player.toBasicString()}"; result.setFail(ServerErrorCode.DoNotRemoveProcessCraftingAnchor, err_msg); Log.getLogger().error(result.toBasicString()); return result; } return result; } async Task tryMakeDefaultInteriorItems(MyhomeUgcInfo myhomeUgcInfo) { var result = new Result(); var err_msg = string.Empty; var owner = getOwner() as Myhome; ArgumentNullException.ThrowIfNull(owner, $"owner is null !!!"); var myhome_inventory_action = owner.getEntityAction(); ArgumentNullException.ThrowIfNull(myhome_inventory_action, $"myhome_inventory_action is null !!! - {owner.toBasicString()}"); foreach (var anchorInfo in myhomeUgcInfo.AnchorInfos) { if (!anchorInfo.isProp()) continue; var item_meta_id = anchorInfo.TableId; (result, var changed_items) = await myhome_inventory_action.tryTakalbleToBag((UInt32)item_meta_id, 1); if (result.isFail()) { return result; } foreach (var changed_item in changed_items) { var changed_item_attribute = changed_item.getEntityAttribute(); ArgumentNullException.ThrowIfNull(changed_item_attribute, $"item_attribute is null !!!"); anchorInfo.EntityGuid = changed_item_attribute.ItemGuid; } } return result; } async Task<(Result, Dictionary>)> tryRelocateInteriorItems(MyhomeUgcInfo myhomeUgcInfo) { var result = new Result(); var err_msg = string.Empty; var changed_ugc_item_guids = new Dictionary>(); var myhome = getOwner() as Myhome; ArgumentNullException.ThrowIfNull(myhome, $"owner is null !!!"); var player = myhome.onGetMasterEntity() as Player; ArgumentNullException.ThrowIfNull(player, $"player is null !!!"); var myhome_inventory_action = myhome.getEntityAction(); ArgumentNullException.ThrowIfNull(myhome_inventory_action, $"myhome_inventory_action is null !!! - {myhome.toBasicString()}, {player.toBasicString()}"); var user_inventory_action = player.getEntityAction(); ArgumentNullException.ThrowIfNull(user_inventory_action, $"user_inventory_action is null !!! - {myhome.toBasicString()}, {player.toBasicString()}"); var current_myhome_ugc_info = getMyhomeUgcInfo(); (var user_to_myhome_items, var myhome_to_user_items) = MyhomeHelper.getModifyInteriorItems(current_myhome_ugc_info, myhomeUgcInfo); ArgumentNullException.ThrowIfNull(user_to_myhome_items, $"user_to_myhome_items is null !!!"); ArgumentNullException.ThrowIfNull(myhome_to_user_items, $"myhome_to_user_items is null !!!"); // User Inventory 에서 제거 var move_to_myhome_items = new Dictionary(); foreach (var (move_item_guid, move_count) in user_to_myhome_items) { (result, var changed_item) = await user_inventory_action.tryDeleteItemByGuid(move_item_guid, (UInt16)move_count); NullReferenceCheckHelper.throwIfNull(changed_item, () => $"changed_item is null !!!"); if (result.isFail()) { err_msg = $"Failed to tryDeleteItemByGuid() !!! : {result.toBasicString()} - {myhome.toBasicString()}, {player.toBasicString()}"; Log.getLogger().error(err_msg); return (result, changed_ugc_item_guids); } var item_meta = changed_item.getItemMeta(); NullReferenceCheckHelper.throwIfNull(item_meta, () => $"item_meta is null !!!"); var item_meta_id = item_meta.ItemId; move_to_myhome_items[move_item_guid] = (item_meta_id, move_count); } // Myhome Inventory 에서 제거 var move_to_user_items = new Dictionary(); foreach (var (move_item_guid, move_count) in myhome_to_user_items) { (result, var changed_item) = await myhome_inventory_action.tryDeleteItemByGuid(move_item_guid, (UInt16)move_count); NullReferenceCheckHelper.throwIfNull(changed_item, () => $"changed_item is null !!!"); if (result.isFail()) { err_msg = $"Failed to tryDeleteItemByGuid() !!! : {result.toBasicString()} - {myhome.toBasicString()}, {player.toBasicString()}"; Log.getLogger().error(err_msg); return (result, changed_ugc_item_guids); } var item_meta = changed_item.getItemMeta(); NullReferenceCheckHelper.throwIfNull(item_meta, () => $"item_meta is null !!!"); var item_meta_id = item_meta.ItemId; move_to_user_items.TryGetValue(item_meta_id, out var count); move_to_user_items[item_meta_id] = count + move_count; } // User Inventory 에 추가 foreach (var (item_meta_id, item_count) in move_to_user_items) { (result, var changed_items) = await user_inventory_action.tryTakalbleToBag((UInt32)item_meta_id, (UInt16)item_count); if (result.isFail()) { err_msg = $"Failed to tryTakalbleToBag() !!! : {result.toBasicString()} - {myhome.toBasicString()}, {player.toBasicString()}"; Log.getLogger().error(err_msg); return (result, changed_ugc_item_guids); } } // Myhome Inventory 에 추가 foreach (var (item_guid, (item_meta_id, item_count)) in move_to_myhome_items) { (result, var changed_items) = await myhome_inventory_action.tryTakalbleToBag((UInt32)item_meta_id, (UInt16)item_count); if (result.isFail()) { err_msg = $"Failed to tryTakalbleToBag() !!! : {result.toBasicString()} - {myhome.toBasicString()}, {player.toBasicString()}"; Log.getLogger().error(err_msg); return (result, changed_ugc_item_guids); } var new_items = new Dictionary(); foreach (var changed_item in changed_items) { var changed_item_attribute = changed_item.getEntityAttribute(); ArgumentNullException.ThrowIfNull(changed_item_attribute, $"item_attribute is null !!!"); var new_item_guid = changed_item_attribute.ItemGuid; var new_item_count = changed_item_attribute.ItemStackCount; new_items.TryGetValue(new_item_guid, out var count); new_items[new_item_guid] = count + new_item_count; } changed_ugc_item_guids[item_guid] = new_items; } return (result, changed_ugc_item_guids); } void modifyMyhomeUgcInfo(MyhomeUgcInfo myhomeUgcInfo, Dictionary> changedUgcItemGuids) { foreach (var anchorInfo in myhomeUgcInfo.AnchorInfos) { if (!anchorInfo.isProp()) continue; if (!changedUgcItemGuids.TryGetValue(anchorInfo.EntityGuid, out var changed_item_guids)) continue; foreach (var (changed_item_guid, changed_item_count) in changed_item_guids) { if (changed_item_count <= 0) continue; anchorInfo.EntityGuid = changed_item_guid; changed_item_guids[changed_item_guid] = changed_item_count - 1; } } } async Task<(Result, Dictionary?)> tryRelocateUgcNpcs(MyhomeUgcInfo myhomeUgcInfo) { var result = new Result(); var err_msg = string.Empty; var modify_ugc_npc_state_infos = new Dictionary(); var myhome = getOwner() as Myhome; ArgumentNullException.ThrowIfNull(myhome, $"owner is null !!!"); var player = myhome.onGetMasterEntity() as Player; ArgumentNullException.ThrowIfNull(player, $"player is null !!!"); var myhome_attribute = myhome.getEntityAttribute(); ArgumentNullException.ThrowIfNull(myhome_attribute, $"myhome_attribute is null !!! - {myhome.toBasicString()}, {player.toBasicString()}"); var player_action = player.getEntityAction(); ArgumentNullException.ThrowIfNull(player_action, $"player_action is null !!! - {myhome.toBasicString()}, {player.toBasicString()}"); var myhome_guid = myhome_attribute.MyhomeGuid; var current_myhome_ugc_info = getMyhomeUgcInfo(); (var add_ugc_npc_anchor_infos, var remove_upc_npc_anchor_infos, var modify_ugc_npc_anchor_infos) = MyhomeHelper.getModifyUgcNpcAnchorInfos(current_myhome_ugc_info, myhomeUgcInfo); result = MyhomeHelper.getMyhomeInstanceId(myhomeUgcInfo.RoomType, out var instance_meta_id); if (result.isFail()) { err_msg = $"Fail to getMyhomeInstanceId() !!! : {result.toBasicString()} - {player.toBasicString()}"; Log.getLogger().error(err_msg); return (result, null); } foreach (var ugc_anchor_info in remove_upc_npc_anchor_infos) { (result, var ugc_npc, var npc_location_in_target_doc) = await player_action.tryReleaseUgcNpcFromMyhome(myhome_guid, ugc_anchor_info.AnchorGuid, ugc_anchor_info.EntityGuid); NullReferenceCheckHelper.throwIfNull(ugc_npc, () => $"ugc_npc is null !!!"); if (result.isFail()) { err_msg = $"Failed to tryReleaseUgcNpcFromMyhome() !!! : {result.toBasicString()} - {myhome.toBasicString()}"; Log.getLogger().error(err_msg); return (result, null); } var ugc_npc_attribute = ugc_npc.getEntityAttribute(); ArgumentNullException.ThrowIfNull(ugc_npc_attribute, $"ugc_npc_attribute is null !!! - {myhome.toBasicString()}, {player.toBasicString()}"); var entity_state_info = new EntityStateInfo(); entity_state_info.StateType = ugc_npc_attribute.State; entity_state_info.AnchorMetaGuid = ugc_npc_attribute.AnchorMetaGuid; entity_state_info.MetaIdOfStateType = (int)ugc_npc_attribute.MetaIdOfEntityStateType; modify_ugc_npc_state_infos[ugc_npc_attribute.UgcNpcMetaGuid] = entity_state_info; } var myhome_warp_pos = MapHelper.getWarpPos(ContentsType.MyHome); foreach (var ugc_anchor_info in add_ugc_npc_anchor_infos) { var beacon_pos = MapHelper.getWorldPosFromMyhomeRelativePos(ugc_anchor_info.Coordinate); var npc_location = new NpcLocation(); npc_location.AnchorMetaGuid = ugc_anchor_info.AnchorGuid; npc_location.CurrentPos.X = beacon_pos.X; npc_location.CurrentPos.Y = beacon_pos.Y; npc_location.CurrentPos.Z = beacon_pos.Z; npc_location.CurrentPos.FacingAngle = ugc_anchor_info.Rotation.Yaw; (result, var ugc_npc, var npc_location_in_target_doc) = await player_action.tryLocateUgcNpcToMyhome(myhome_guid, instance_meta_id, npc_location, ugc_anchor_info.EntityGuid); if (result.isFail()) { err_msg = $"Failed to tryLocateUgcNpcToMyhome() !!! : {result.toBasicString()} - {myhome.toBasicString()}"; Log.getLogger().error(err_msg); return (result, null); } NullReferenceCheckHelper.throwIfNull(ugc_npc, () => $"ugc_npc is null !!!"); var ugc_npc_attribute = ugc_npc.getEntityAttribute(); ArgumentNullException.ThrowIfNull(ugc_npc_attribute, $"ugc_npc_attribute is null !!!"); var entity_state_info = new EntityStateInfo(); entity_state_info.StateType = ugc_npc_attribute.State; entity_state_info.AnchorMetaGuid = ugc_npc_attribute.AnchorMetaGuid; entity_state_info.MetaIdOfStateType = (int)ugc_npc_attribute.MetaIdOfEntityStateType; modify_ugc_npc_state_infos[ugc_npc_attribute.UgcNpcMetaGuid] = entity_state_info; } foreach (var ugc_anchor_info in modify_ugc_npc_anchor_infos) { var beacon_pos = MapHelper.getWorldPosFromMyhomeRelativePos(ugc_anchor_info.Coordinate); var npc_location = new NpcLocation(); npc_location.AnchorMetaGuid = ugc_anchor_info.AnchorGuid; npc_location.CurrentPos.X = beacon_pos.X; npc_location.CurrentPos.Y = beacon_pos.Y; npc_location.CurrentPos.Z = beacon_pos.Z; npc_location.CurrentPos.FacingAngle = ugc_anchor_info.Rotation.Yaw; (result, var ugc_npc, var npc_location_in_target_doc) = await player_action.tryModifyUgcNpcToMyhome(myhome_guid, npc_location, ugc_anchor_info.EntityGuid, EntityStateType.UsingByMyHome); if (result.isFail()) { err_msg = $"Failed to tryModifyUgcNpcToMyhome() !!! : {result.toBasicString()} - {myhome.toBasicString()}"; Log.getLogger().error(err_msg); return (result, null); } } var crafter_anchor_infos = myhomeUgcInfo.getCrafterAnchorInfos(); var craft_action = player.getEntityAction(); foreach (var crafter_beacon_pos in myhomeUgcInfo.CrafterBeaconPos) { if (!crafter_anchor_infos.TryGetValue(crafter_beacon_pos.AnchorGuid, out var anchor_Info)) continue; if (!craft_action.getCraftInfo(crafter_beacon_pos.AnchorGuid, out var craft_info)) continue; if (craft_info.BeaconGuid.isNullOrWhiteSpace()) continue; var beacon_guid = craft_info.BeaconGuid; var beacon_pos = MapHelper.getWorldPosFromMyhomeRelativePos(crafter_beacon_pos.CrafterBeaconPos_); var npc_location = new NpcLocation(); npc_location.AnchorMetaGuid = crafter_beacon_pos.AnchorGuid; npc_location.CurrentPos.X = beacon_pos.X; npc_location.CurrentPos.Y = beacon_pos.Y; npc_location.CurrentPos.Z = beacon_pos.Z; npc_location.CurrentPos.FacingAngle = crafter_beacon_pos.CrafterBeaconPos_.Angle; (result, var ugc_npc, var npc_location_in_target_doc) = await player_action.tryModifyUgcNpcToMyhome(myhome_guid, npc_location, beacon_guid, EntityStateType.UsingByCrafting, (uint)anchor_Info.TableId); if (result.isFail()) { err_msg = $"Failed to tryModifyUgcNpcToMyhome() !!! : {result.toBasicString()} - {myhome.toBasicString()}"; Log.getLogger().error(err_msg); return (result, null); } } return (result, modify_ugc_npc_state_infos); } public async Task<(Result, Dictionary?, List?)> deleteMyhome() { var result = new Result(); var err_msg = string.Empty; var modifyUgcNpcStateInfos = new Dictionary(); var business_logs = new List(); var myhome = getOwner() as Myhome; NullReferenceCheckHelper.throwIfNull(myhome, () => $"myhome is null !!!"); var player = myhome.onGetMasterEntity() as Player; NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!"); var myhome_attribute = myhome.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(myhome_attribute, () => $"myhome_attribute is null !!! - {myhome.toBasicString()}, {player.toBasicString()}"); var myhome_guid = myhome_attribute.MyhomeGuid; if (myhome_attribute.SelectedFlag == 1) { err_msg = $"Myhome is Selected !!! - {myhome.toBasicString()}, {player.toBasicString()}"; result.setFail(ServerErrorCode.MyhomeIsSelected, err_msg); Log.getLogger().error(result.toBasicString()); return (result, null, null); } result = checkBeforeDeleteMyhome(); if (result.isFail()) { err_msg = $"Failed to checkBeforeDeleteMyhome() !!! : {result.toBasicString()}"; Log.getLogger().error(err_msg); return (result, null, null); } (result, _) = await tryRelocateInteriorItems(new MyhomeUgcInfo()); if (result.isFail()) { err_msg = $"Failed to tryRelocateInteriorItems() !!! : {result.toBasicString()}"; Log.getLogger().error(err_msg); return (result, null, null); } var player_action = player.getEntityAction(); NullReferenceCheckHelper.throwIfNull(player_action, () => $"player_action is null !!!"); foreach (var anchorInfo in myhome_attribute.UgcInfo.AnchorInfos) { if (!anchorInfo.isNpcProp()) continue; (result, var ugc_npc, _) = await player_action.tryReleaseUgcNpcFromMyhome(myhome_guid, anchorInfo.AnchorGuid, anchorInfo.EntityGuid); if (result.isFail()) { err_msg = $"Failed to tryReleaseUgcNpcFromMyhome() !!! : {result.toBasicString()} - {myhome.toBasicString()}"; Log.getLogger().error(err_msg); return (result, null, null); } NullReferenceCheckHelper.throwIfNull(ugc_npc, () => $"ugc_npc is null !!!"); var ugc_npc_attribute = ugc_npc.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(ugc_npc_attribute, () => $"ugc_npc_attribute is null !!!"); var entity_state_info = new EntityStateInfo(); entity_state_info.StateType = ugc_npc_attribute.State; entity_state_info.AnchorMetaGuid = ugc_npc_attribute.AnchorMetaGuid; entity_state_info.MetaIdOfStateType = (int)ugc_npc_attribute.MetaIdOfEntityStateType; modifyUgcNpcStateInfos[ugc_npc_attribute.UgcNpcMetaGuid] = entity_state_info; } myhome_attribute.deleteEntityAttribute(); var myhome_log_info = MyHomeBusinessLogHelper.toMyHomeLogInfo(myhome_attribute); var myhome_business_log = new MyHomeBusinessLog(myhome_log_info); business_logs.Add(myhome_business_log); return (result, modifyUgcNpcStateInfos, business_logs); } Result checkBeforeDeleteMyhome() { var result = new Result(); var err_msg = string.Empty; var myhome = getOwner() as Myhome; NullReferenceCheckHelper.throwIfNull(myhome, () => $"owner is null !!!"); var player = myhome.onGetMasterEntity() as Player; NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!"); var current_myhome_ugc_info = getMyhomeUgcInfo(); var crafter_anchor_infos = current_myhome_ugc_info.getCrafterAnchorInfos(); var crafting_anchor_guids = new List(); foreach (var anchor_guid in crafter_anchor_infos.Keys) { crafting_anchor_guids.Add(anchor_guid); } result = CraftHelper.checkAnchorCrafting(player, crafting_anchor_guids); if (result.isFail()) { err_msg = $"Failed to checkCraftingProcess() !!! : {result.toBasicString()} - {myhome.toBasicString()}, {player.toBasicString()}"; result.setFail(ServerErrorCode.DoNotRemoveProcessCraftingAnchor, err_msg); Log.getLogger().error(result.toBasicString()); return result; } return result; } public async Task tryUploadMyhomeUgcInfoToS3() { var result = new Result(); var err_msg = string.Empty; var myhome_attribute = getOwner().getEntityAttribute(); ArgumentNullException.ThrowIfNull(myhome_attribute, $"myhome_attribute is null !!!"); result = await MyhomeHelper.uploadMyhomeUgcInfo(myhome_attribute); if (result.isFail()) { err_msg = $"Failed to uploadMyhomeUgcInfo() !!! : {result.toBasicString()}"; Log.getLogger().error(err_msg); return result; } return result; } public async Task tryDeleteMyhomeUgcInfoFolderFileFromS3() { var result = new Result(); var err_msg = string.Empty; var myhome_attribute = getOwner().getEntityAttribute(); ArgumentNullException.ThrowIfNull(myhome_attribute, $"myhome_attribute is null !!!"); result = await MyhomeHelper.deleteMyhomeUgcInfoFolderFile(myhome_attribute); if (result.isFail()) { err_msg = $"Failed to deleteMyhomeUgcInfoFolderFile() !!! : {result.toBasicString()}"; Log.getLogger().error(err_msg); return result; } return result; } public bool isSelectedMyhome() { var myhome_attribute = getOwner().getEntityAttribute(); ArgumentNullException.ThrowIfNull(myhome_attribute, $"myhome_attribute is null !!!"); if (myhome_attribute.SelectedFlag == 1) return true; return false; } }