초기커밋
This commit is contained in:
705
GameServer/Contents/MyHome/Action/MyhomeAction.cs
Normal file
705
GameServer/Contents/MyHome/Action/MyhomeAction.cs
Normal file
@@ -0,0 +1,705 @@
|
||||
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<Result> onInit()
|
||||
{
|
||||
await Task.CompletedTask;
|
||||
|
||||
var result = new Result();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public override void onClear()
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
public MyHomeInfo toMyHomeInfo()
|
||||
{
|
||||
var myhome_attribute = getOwner().getEntityAttribute<MyhomeAttribute>();
|
||||
ArgumentNullException.ThrowIfNull(myhome_attribute);
|
||||
|
||||
var myhome_info = myhome_attribute.toMyhomeInfo();
|
||||
|
||||
return myhome_info;
|
||||
}
|
||||
|
||||
|
||||
public MyhomeUgcInfo getMyhomeUgcInfo()
|
||||
{
|
||||
var myhome_attribute = getOwner().getEntityAttribute<MyhomeAttribute>();
|
||||
ArgumentNullException.ThrowIfNull(myhome_attribute);
|
||||
|
||||
return myhome_attribute.UgcInfo;
|
||||
}
|
||||
|
||||
|
||||
public void selectMyHome()
|
||||
{
|
||||
var myhome_attribute = getOwner().getEntityAttribute<MyhomeAttribute>();
|
||||
ArgumentNullException.ThrowIfNull(myhome_attribute);
|
||||
|
||||
myhome_attribute.SelectedFlag = 1;
|
||||
myhome_attribute.modifiedEntityAttribute();
|
||||
}
|
||||
|
||||
public void unselectMyHome()
|
||||
{
|
||||
var myhome_attribute = getOwner().getEntityAttribute<MyhomeAttribute>();
|
||||
ArgumentNullException.ThrowIfNull(myhome_attribute);
|
||||
|
||||
myhome_attribute.SelectedFlag = 0;
|
||||
myhome_attribute.modifiedEntityAttribute();
|
||||
}
|
||||
|
||||
|
||||
public void renameMyhome(string newMyhomeName)
|
||||
{
|
||||
var myhome_attribute = getOwner().getEntityAttribute<MyhomeAttribute>();
|
||||
ArgumentNullException.ThrowIfNull(myhome_attribute);
|
||||
|
||||
myhome_attribute.MyhomeName = newMyhomeName;
|
||||
myhome_attribute.modifiedEntityAttribute();
|
||||
}
|
||||
|
||||
public async Task<Result> 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<MyhomeAttribute>();
|
||||
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<ILogInvoker>?)> 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<ILogInvoker>();
|
||||
|
||||
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<MyhomeAttribute>();
|
||||
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<Result> 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<MyhomeInventoryAction>();
|
||||
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<ItemAttributeBase>();
|
||||
ArgumentNullException.ThrowIfNull(changed_item_attribute, $"item_attribute is null !!!");
|
||||
|
||||
anchorInfo.EntityGuid = changed_item_attribute.ItemGuid;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
async Task<(Result, Dictionary<string, Dictionary<string, int>>)> tryRelocateInteriorItems(MyhomeUgcInfo myhomeUgcInfo)
|
||||
{
|
||||
var result = new Result();
|
||||
var err_msg = string.Empty;
|
||||
|
||||
var changed_ugc_item_guids = new Dictionary<string, Dictionary<string, int>>();
|
||||
|
||||
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<MyhomeInventoryAction>();
|
||||
ArgumentNullException.ThrowIfNull(myhome_inventory_action, $"myhome_inventory_action is null !!! - {myhome.toBasicString()}, {player.toBasicString()}");
|
||||
|
||||
var user_inventory_action = player.getEntityAction<UserInventoryAction>();
|
||||
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<string, (int, int)>();
|
||||
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<int, int>();
|
||||
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<string, int>();
|
||||
foreach (var changed_item in changed_items)
|
||||
{
|
||||
var changed_item_attribute = changed_item.getEntityAttribute<ItemAttributeBase>();
|
||||
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<string, Dictionary<string, int>> 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<string, EntityStateInfo>?)> tryRelocateUgcNpcs(MyhomeUgcInfo myhomeUgcInfo)
|
||||
{
|
||||
var result = new Result();
|
||||
var err_msg = string.Empty;
|
||||
|
||||
var modify_ugc_npc_state_infos = new Dictionary<string, EntityStateInfo>();
|
||||
|
||||
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<MyhomeAttribute>();
|
||||
ArgumentNullException.ThrowIfNull(myhome_attribute, $"myhome_attribute is null !!! - {myhome.toBasicString()}, {player.toBasicString()}");
|
||||
|
||||
var player_action = player.getEntityAction<PlayerAction>();
|
||||
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<UgcNpcAttribute>();
|
||||
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<UgcNpcAttribute>();
|
||||
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<CraftAction>();
|
||||
|
||||
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<string, EntityStateInfo>?, List<ILogInvoker>?)> deleteMyhome()
|
||||
{
|
||||
var result = new Result();
|
||||
var err_msg = string.Empty;
|
||||
|
||||
var modifyUgcNpcStateInfos = new Dictionary<string, EntityStateInfo>();
|
||||
var business_logs = new List<ILogInvoker>();
|
||||
|
||||
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<MyhomeAttribute>();
|
||||
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<PlayerAction>();
|
||||
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<UgcNpcAttribute>();
|
||||
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<string>();
|
||||
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<Result> tryUploadMyhomeUgcInfoToS3()
|
||||
{
|
||||
var result = new Result();
|
||||
var err_msg = string.Empty;
|
||||
|
||||
var myhome_attribute = getOwner().getEntityAttribute<MyhomeAttribute>();
|
||||
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<Result> tryDeleteMyhomeUgcInfoFolderFileFromS3()
|
||||
{
|
||||
var result = new Result();
|
||||
var err_msg = string.Empty;
|
||||
|
||||
var myhome_attribute = getOwner().getEntityAttribute<MyhomeAttribute>();
|
||||
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<MyhomeAttribute>();
|
||||
ArgumentNullException.ThrowIfNull(myhome_attribute, $"myhome_attribute is null !!!");
|
||||
|
||||
if (myhome_attribute.SelectedFlag == 1)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
388
GameServer/Contents/MyHome/Action/MyhomeAgentAction.cs
Normal file
388
GameServer/Contents/MyHome/Action/MyhomeAgentAction.cs
Normal file
@@ -0,0 +1,388 @@
|
||||
using System.Collections.Concurrent;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
|
||||
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
using static ClientToGameRes.Types;
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
internal class MyhomeAgentAction : EntityActionBase
|
||||
{
|
||||
ConcurrentDictionary<string, Myhome> m_myhomes = new();
|
||||
|
||||
public MyhomeAgentAction(Player owner)
|
||||
: base(owner)
|
||||
{ }
|
||||
|
||||
public override async Task<Result> onInit()
|
||||
{
|
||||
await Task.CompletedTask;
|
||||
|
||||
var result = new Result();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public override void onClear()
|
||||
{
|
||||
m_myhomes.Clear();
|
||||
}
|
||||
|
||||
public bool tryGetMyHome(string myhomeGuid, [MaybeNullWhen(false)] out Myhome myHome)
|
||||
{
|
||||
return m_myhomes.TryGetValue(myhomeGuid, out myHome);
|
||||
}
|
||||
|
||||
public List<Myhome> getMyHomes()
|
||||
{
|
||||
return m_myhomes.Values.ToList();
|
||||
}
|
||||
|
||||
public void addMyhome(string myhome_guid, Myhome myhome)
|
||||
{
|
||||
m_myhomes.TryAdd(myhome_guid, myhome);
|
||||
}
|
||||
|
||||
public Result checkMyhomeSlot()
|
||||
{
|
||||
var result = new Result();
|
||||
var err_msg = string.Empty;
|
||||
|
||||
var player = getOwner() as Player;
|
||||
ArgumentNullException.ThrowIfNull(player);
|
||||
|
||||
var user_contents_setting_attribute = player.getEntityAttribute<UserContentsSettingAttribute>();
|
||||
ArgumentNullException.ThrowIfNull(user_contents_setting_attribute);
|
||||
|
||||
var myhome_slot_opem_count = user_contents_setting_attribute.MyhomeSlotOpenCount;
|
||||
var current_myhome_count = m_myhomes.Count;
|
||||
|
||||
if (current_myhome_count >= myhome_slot_opem_count)
|
||||
{
|
||||
err_msg = $"Myhome Not Enough Slot !!! : CurrentMyhomeCount:{current_myhome_count} >= MyhomeSlotOpenCount:{myhome_slot_opem_count} - {player.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.MyhomeNotEnoughSlot, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<Result> tryAddMyHomeFromDoc(MyhomeDoc myHomeDoc)
|
||||
{
|
||||
var result = new Result();
|
||||
var err_msg = string.Empty;
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
|
||||
var player = getOwner() as Player;
|
||||
ArgumentNullException.ThrowIfNull(player);
|
||||
|
||||
Myhome myhome = new(player.getUserGuid());
|
||||
await myhome.onInit();
|
||||
|
||||
var myhome_attribute = myhome.getEntityAttribute<MyhomeAttribute>();
|
||||
ArgumentNullException.ThrowIfNull(myhome_attribute);
|
||||
|
||||
if (!myhome_attribute.copyEntityAttributeFromDoc(myHomeDoc))
|
||||
{
|
||||
err_msg = $"Failed to copyEntityAttributeFromDoc() !!! to:{myhome_attribute.getTypeName()}, from:{myHomeDoc.getTypeName()} : {this.getTypeName()}";
|
||||
result.setFail(ServerErrorCode.DynamoDbDocCopyToEntityAttributeFailed, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
(result, var myhome_ugc_info) = await MyhomeHelper.getMyhomeUgcInfo(myhome_attribute);
|
||||
if (result.isFail())
|
||||
{
|
||||
err_msg = $"Fail to getMyhomeUgcInfo() !!! : {result.toBasicString()} - {player.toBasicString()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
myhome_attribute.UgcInfo = myhome_ugc_info!;
|
||||
|
||||
if (!m_myhomes.TryAdd(myhome_attribute.MyhomeGuid, myhome))
|
||||
{
|
||||
err_msg = $"Failed to TryAdd() !!! : {myhome.toBasicString()} : {this.getTypeName()}";
|
||||
result.setFail(ServerErrorCode.MyHomeDocLoadDuplicatedMyHome, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<(Result, Myhome?)> tryMakeDefaultMyhome()
|
||||
{
|
||||
var result = new Result();
|
||||
var err_msg = string.Empty;
|
||||
|
||||
var player = getOwner() as Player;
|
||||
ArgumentNullException.ThrowIfNull(player);
|
||||
|
||||
Myhome myhome = new(player.getUserGuid());
|
||||
await myhome.onInit();
|
||||
|
||||
var myhome_action = myhome.getEntityAction<MyhomeAction>();
|
||||
ArgumentNullException.ThrowIfNull(myhome_action);
|
||||
|
||||
var default_myhome_ugc_info_file_name = MetaHelper.GameConfigMeta.MyHomeDefaultSaveFileName;
|
||||
if (!MapManager.Instance.getDefaultMyhomeUgcInfo(default_myhome_ugc_info_file_name, out var myhome_ugc_info))
|
||||
{
|
||||
err_msg = $"Failed to getDefaultMyhomeUgcInfo() !!! : {default_myhome_ugc_info_file_name} : {this.getTypeName()}";
|
||||
result.setFail(ServerErrorCode.MyhomeUgcInfoFileNotFoune, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return (result, null);
|
||||
}
|
||||
|
||||
result = await myhome_action.tryMakeDefaultMyhome(myhome_ugc_info);
|
||||
if (result.isFail())
|
||||
{
|
||||
return (result, null);
|
||||
}
|
||||
|
||||
var myhome_attribute = myhome.getEntityAttribute<MyhomeAttribute>();
|
||||
ArgumentNullException.ThrowIfNull(myhome_attribute);
|
||||
|
||||
if (!m_myhomes.TryAdd(myhome_attribute.MyhomeGuid, myhome))
|
||||
{
|
||||
err_msg = $"Failed to TryAdd() !!! : {myhome.toBasicString()} : {this.getTypeName()}";
|
||||
result.setFail(ServerErrorCode.MyHomeAlreadyExist, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return (result, null);
|
||||
}
|
||||
|
||||
return (result, myhome);
|
||||
}
|
||||
|
||||
public bool tryGetSelectedMyhome([MaybeNullWhen(false)] out Myhome myHome)
|
||||
{
|
||||
myHome = null;
|
||||
|
||||
foreach (var myhome in m_myhomes.Values)
|
||||
{
|
||||
var myhome_attribute = myhome.getEntityAttribute<MyhomeAttribute>();
|
||||
if (myhome_attribute == null)
|
||||
continue;
|
||||
|
||||
if (myhome_attribute.SelectedFlag == 1)
|
||||
{
|
||||
myHome = myhome;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool tryGetSelectedMyHomeAttribute([MaybeNullWhen(false)] out MyhomeAttribute myhomeAttribute)
|
||||
{
|
||||
myhomeAttribute = null;
|
||||
|
||||
foreach (var myhome in m_myhomes.Values)
|
||||
{
|
||||
myhomeAttribute = myhome.getOriginEntityAttribute<MyhomeAttribute>();
|
||||
if (myhomeAttribute == null)
|
||||
continue;
|
||||
|
||||
if (myhomeAttribute.SelectedFlag == 1)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public (Result, ExchagneMyHomeRes, List<ILogInvoker>?) tryExchangeMyHome(string myhomeGuid)
|
||||
{
|
||||
var result = new Result();
|
||||
var err_msg = string.Empty;
|
||||
|
||||
var res = new ExchagneMyHomeRes();
|
||||
var business_logs = new List<ILogInvoker>();
|
||||
|
||||
var player = getOwner() as Player;
|
||||
ArgumentNullException.ThrowIfNull(player, $"player is null !!!");
|
||||
|
||||
if (!tryGetSelectedMyhome(out var selectedMyHome))
|
||||
{
|
||||
err_msg = $"Failed to tryGetSelectedMyHome() !!! - {player.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.MyHomeNotFound, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return (result, res, null);
|
||||
}
|
||||
|
||||
if (!tryGetMyHome(myhomeGuid, out var myhome))
|
||||
{
|
||||
err_msg = $"Failed to tryGetMyHome() !!! : myhomeGuid:{myhomeGuid} - {player.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.MyHomeNotFound, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return (result, res, null);
|
||||
}
|
||||
|
||||
var selected_myhome_action = selectedMyHome.getEntityAction<MyhomeAction>();
|
||||
ArgumentNullException.ThrowIfNull(selected_myhome_action, $"selected_myhome_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
var selected_myhome_attribute = selectedMyHome.getEntityAttribute<MyhomeAttribute>();
|
||||
ArgumentNullException.ThrowIfNull(selected_myhome_attribute, $"selected_myhome_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
var myhome_action = myhome.getEntityAction<MyhomeAction>();
|
||||
ArgumentNullException.ThrowIfNull(myhome_action, $"myhome_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
var myhome_attribute = myhome.getEntityAttribute<MyhomeAttribute>();
|
||||
ArgumentNullException.ThrowIfNull(myhome_attribute, $"myhome_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
var user_guid = player.getUserGuid();
|
||||
var old_myhome_guid = selected_myhome_attribute.MyhomeGuid;
|
||||
var new_myhome_guid = myhome_attribute.MyhomeGuid;
|
||||
|
||||
selected_myhome_action.unselectMyHome();
|
||||
myhome_action.selectMyHome();
|
||||
|
||||
var myhome_info = myhome_action.toMyHomeInfo();
|
||||
|
||||
res.MyhomeInfo = myhome_info;
|
||||
|
||||
var myhome_exchange_log_info = MyHomeBusinessLogHelper.toMyhomeExchangeLogInfo(user_guid, old_myhome_guid, new_myhome_guid);
|
||||
var myhome_exchange_business_log = new MyhomeExchangeBusinessLog(myhome_exchange_log_info);
|
||||
business_logs.Add(myhome_exchange_business_log);
|
||||
|
||||
return (result, res, business_logs);
|
||||
}
|
||||
|
||||
public async Task<(Result, Dictionary<string, EntityStateInfo>?, List<ILogInvoker>?)> tryDeleteMyhome(string myhomeGuid)
|
||||
{
|
||||
var result = new Result();
|
||||
var err_msg = string.Empty;
|
||||
|
||||
var business_logs = new List<ILogInvoker>();
|
||||
|
||||
if (!tryGetMyHome(myhomeGuid, out var myhome))
|
||||
{
|
||||
err_msg = $"Failed to tryGetMyHome() !!! : myhomeGuid:{myhomeGuid}";
|
||||
result.setFail(ServerErrorCode.MyHomeNotFound, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return (result, null, null);
|
||||
}
|
||||
|
||||
var myhome_action = myhome.getEntityAction<MyhomeAction>();
|
||||
ArgumentNullException.ThrowIfNull(myhome_action, $"myhome_action is null !!!");
|
||||
|
||||
(result, var modifyUgcNpcStateInfos, var delete_myhome_business_log) = await myhome_action.deleteMyhome();
|
||||
if (result.isFail())
|
||||
{
|
||||
err_msg = $"Failed to deleteMyhome() !!! : {result.toBasicString()} : {this.getTypeName()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
|
||||
return (result, null, null);
|
||||
}
|
||||
NullReferenceCheckHelper.throwIfNull(delete_myhome_business_log, () => $"delete_myhome_business_log is null !!!");
|
||||
|
||||
result = await myhome_action.tryDeleteMyhomeUgcInfoFolderFileFromS3();
|
||||
if (result.isFail())
|
||||
{
|
||||
err_msg = $"Failed to tryDeleteMyhomeUgcInfoFolderFileFromS3() !!! : {result.toBasicString()} : {this.getTypeName()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
|
||||
return (result, null, null);
|
||||
}
|
||||
|
||||
m_myhomes.Remove(myhomeGuid, out _);
|
||||
|
||||
business_logs.AddRange(delete_myhome_business_log);
|
||||
|
||||
return (result, modifyUgcNpcStateInfos, business_logs);
|
||||
}
|
||||
|
||||
public (Result, List<ILogInvoker>?) tryRenameMyhome(string myhomeGuid, string newMyhomeName)
|
||||
{
|
||||
var result = new Result();
|
||||
var err_msg = string.Empty;
|
||||
|
||||
var business_logs = new List<ILogInvoker>();
|
||||
|
||||
result = MyhomeHelper.checkMyhomeName(newMyhomeName);
|
||||
if (result.isFail())
|
||||
{
|
||||
err_msg = $"Failed to checkMyhomeName() !!! : {result.toBasicString()} : {this.getTypeName()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
|
||||
return (result, null);
|
||||
}
|
||||
|
||||
foreach (var checkMyhome in m_myhomes.Values)
|
||||
{
|
||||
var check_myhome_attribute = checkMyhome.getEntityAttribute<MyhomeAttribute>();
|
||||
ArgumentNullException.ThrowIfNull(check_myhome_attribute, $"check_myhome_attribute is null !!!");
|
||||
|
||||
if (check_myhome_attribute.MyhomeName == newMyhomeName)
|
||||
{
|
||||
err_msg = $"Myhome Name Duplicated !!! : newMyhomeName:{newMyhomeName} : {this.getTypeName()}";
|
||||
result.setFail(ServerErrorCode.MyhomeNameDuplicated, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return (result, null);
|
||||
}
|
||||
}
|
||||
|
||||
if (!tryGetMyHome(myhomeGuid, out var myhome))
|
||||
{
|
||||
err_msg = $"Failed to tryGetMyHome() !!! : myhomeGuid:{myhomeGuid} : {this.getTypeName()}";
|
||||
result.setFail(ServerErrorCode.MyHomeNotFound, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return (result, null);
|
||||
}
|
||||
|
||||
var myhome_attribute = myhome.getEntityAttribute<MyhomeAttribute>();
|
||||
ArgumentNullException.ThrowIfNull(myhome_attribute, $"myhome_attribute is null !!!");
|
||||
|
||||
var old_myhome_name = myhome_attribute.MyhomeName;
|
||||
|
||||
var myhome_action = myhome.getEntityAction<MyhomeAction>();
|
||||
ArgumentNullException.ThrowIfNull(myhome_action, $"myhome_action is null !!!");
|
||||
|
||||
myhome_action.renameMyhome(newMyhomeName);
|
||||
|
||||
var myhome_rename_log_info = MyHomeBusinessLogHelper.toMyhomeRenameLogInfo(myhomeGuid, old_myhome_name, newMyhomeName);
|
||||
var myhome_rename_business_log = new MyhomeRenameBusinessLog(myhome_rename_log_info);
|
||||
business_logs.Add(myhome_rename_business_log);
|
||||
|
||||
return (result, business_logs);
|
||||
}
|
||||
|
||||
public string getMyHomeGuidByAnchorGuid(string anchor_guid)
|
||||
{
|
||||
foreach(var myhome in m_myhomes)
|
||||
{
|
||||
if(myhome.Value.isAnchorInMyhome(anchor_guid) == true)
|
||||
{
|
||||
return myhome.Key;
|
||||
}
|
||||
}
|
||||
return string.Empty;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user