using ServerCommon; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ServerCore; using ServerBase; using OWNER_GUID = System.String; using MASTER_GUID = System.String; namespace GameServer { public class Myhome : EntityBase, IMergeWithInventory { public Myhome(MASTER_GUID masterGuid) : base(EntityType.MyHome, masterGuid) { } public override async Task onInit() { addEntityAttribute(new MyhomeAttribute(this)); addEntityAction(new MyhomeAction(this)); addEntityAction(new MyhomeInventoryAction(this)); return await base.onInit(); } public async Task onMerge(List reservedSlotOnInvens, TransactionRunner transactionRunner) { var result = new Result(); var inventory_action = getEntityAction(); ArgumentNullException.ThrowIfNull(inventory_action, $"inventory_action is null !!! - {toBasicStringWithMaster()}"); ArgumentNullException.ThrowIfNull(transactionRunner, $"transactionRunner is null !!! - {toBasicStringWithMaster()}"); result = await inventory_action.onMergeInventory(reservedSlotOnInvens, transactionRunner); if (result.isFail()) { return result; } return result; } public override EntityBase? onGetMasterEntity() { if (false == hasMasterGuid()) { return null; } var err_msg = string.Empty; var master_guid = getMasterGuid(); ArgumentNullException.ThrowIfNull(master_guid, $"master_guid is null !!! - {toBasicString()}"); var server_logc = GameServerApp.getServerLogic(); ArgumentNullException.ThrowIfNull(server_logc, $"server_logc is null !!! - {toBasicString()}"); var player_manager = server_logc.getPlayerManager(); ArgumentNullException.ThrowIfNull(player_manager, $"player_manager is null !!! - {toBasicString()}"); if (false == player_manager.tryGetUserByPrimaryKey(master_guid, out var found_player)) { return null; } return found_player; } public override TAction getEntityAction() { if (typeof(TAction) == typeof(InventoryActionBase)) { var myhome_action = base.getEntityAction() as TAction; NullReferenceCheckHelper.throwIfNull(myhome_action, () => $"myhome_action is null !!!"); return myhome_action; } var action = base.getEntityAction(); NullReferenceCheckHelper.throwIfNull(action, () => $"action is null !!!"); return action; } public override Type onGetAvailableItemAttributeType() { return typeof(MyhomeItemAttribute); } public override OWNER_GUID onGetGuidOfOwnerEntityType() { var myhome_attribute = getEntityAttributeWithReadOnly(); ArgumentNullException.ThrowIfNull(myhome_attribute, $"myhome_attribute is null !!! - {toBasicStringWithMaster()}"); return myhome_attribute.MyhomeGuid; } public bool isAnchorInMyhome(string anchor_guid) { var myhome_attribute = getEntityAttributeWithReadOnly(); ArgumentNullException.ThrowIfNull(myhome_attribute, $"myhome_attribute is null !!! - {toBasicStringWithMaster()}"); foreach(var anchor in myhome_attribute.UgcInfo.AnchorInfos) { if(anchor.AnchorGuid == anchor_guid) { return true; } } return false; } public override OwnerEntityType onGetOwnerEntityType() { return OwnerEntityType.Myhome; } public override string toBasicString() { return $"{this.getTypeName()}, MyHomeGuid:{getOriginEntityAttribute()?.MyhomeGuid}"; } public override string toSummaryString() { return $"{this.getTypeName()}, {getEntityAttribute()?.toBasicString()}"; } } }