using Google.Protobuf; using Google.Protobuf.WellKnownTypes; using ServerCore; using ServerBase; using ServerCommon; using ServerCommon.BusinessLogDomain; using MetaAssets; using static ClientToGameReq.Types; using SESSION_ID = System.Int32; using WORLD_META_ID = System.UInt32; using META_ID = System.UInt32; using ENTITY_GUID = System.String; using ACCOUNT_ID = System.String; using OWNER_GUID = System.String; using USER_GUID = System.String; using MASTER_GUID = System.String; using CHARACTER_GUID = System.String; using ITEM_GUID = System.String; using ENTITY_UNIQUE_ID = System.String; using ANCHOR_META_GUID = System.String; using NPC_UNIQUE_ID = System.String; using FARMING_ENTITY_GUID = System.String; using LOCATION_UNIQUE_ID = System.String; using GUARD_KEY = System.String; namespace GameServer; public class FarmingEffect : EntityBase { private Map m_curr_map; private AtomicString m_guard_key_nullable = new(); private AtomicBool m_guard_bool = new(false); public FarmingEffect( EntityBase parent, Map currMap) : base(EntityType.Farming, parent) { m_curr_map = currMap; } public override async Task onInit() { var direct_parent = getDirectParent(); NullReferenceCheckHelper.throwIfNull(direct_parent, () => $"direct_parent is null !!!"); addEntityAttribute(new FarmingEffectAttribute(this, direct_parent)); addEntityAttribute(new FarmingEffectLocationInTargetAttribute(this)); addEntityAttribute(new FarmingEffectOwnerAttribute(this)); addEntityAction(new FarmingEffectAction(this)); return await base.onInit(); } public override EntityBase? onGetMasterEntity() { if (false == hasMasterGuid()) { return null; } var err_msg = string.Empty; var master_guid = getMasterGuid(); var server_logc = GameServerApp.getServerLogic(); var player_manager = server_logc.getPlayerManager(); if (false == player_manager.tryGetUserByPrimaryKey(master_guid, out var found_player)) { // 별도 Task로 처리해주는 처리자가 있다면 해당 처리자를 반환 한다. !!! - kangms err_msg = $"Failed to player_manager.tryGetUserByPrimaryKey() !!!, Not found MasterEntity : MasterGuid:{master_guid} - {toBasicString()}"; Log.getLogger().error(err_msg); return null; } return found_player; } public override OWNER_GUID onGetGuidOfOwnerEntityType() { var farming_effect_attribute = getEntityAttributeWithReadOnly(); NullReferenceCheckHelper.throwIfNull(farming_effect_attribute, () => $"farming_effect_attribute is null !!! - {toBasicStringWithMaster()}"); return farming_effect_attribute.FarmingEntityGuid; } public override OwnerEntityType onGetOwnerEntityType() { var farming_effect_attribute = getEntityAttributeWithReadOnly(); NullReferenceCheckHelper.throwIfNull(farming_effect_attribute, () => $"farming_effect_attribute is null !!! - {toBasicStringWithMaster()}"); if(FarmingSummonedEntityType.User == farming_effect_attribute.FarmingSummonedEntityType) { return OwnerEntityType.User; } else if (FarmingSummonedEntityType.Beacon == farming_effect_attribute.FarmingSummonedEntityType) { return OwnerEntityType.UgcNpc; } return OwnerEntityType.None; } public ANCHOR_META_GUID getAnchorMetaGuid() { var farming_effect_attribute = getEntityAttributeWithReadOnly(); NullReferenceCheckHelper.throwIfNull(farming_effect_attribute, () => $"farming_effect_attribute is null !!! - {toBasicStringWithMaster()}"); return farming_effect_attribute.AnchorMetaGuid; } public Map getCurrMap() => m_curr_map; public FarmingSummary toFarmingSummary() { var farming_effect_attribute = getEntityAttributeWithReadOnly(); NullReferenceCheckHelper.throwIfNull(farming_effect_attribute, () => $"farming_effect_attribute is null !!! - {toBasicString()}"); var farming_effect_action = getEntityAction(); NullReferenceCheckHelper.throwIfNull(farming_effect_action, () => $"farming_effect_action is null !!! - {toBasicString()}"); var farming_anchor_info = farming_effect_action.getAnchorInfo(); var farming_anchor_prop = farming_anchor_info.AnchorProp; var farming_summary = new FarmingSummary(); farming_summary.FarmingAnchorMetaId = farming_effect_attribute.AnchorMetaGuid; farming_summary.FarmingPropMetaId = farming_anchor_prop.TableId; farming_summary.FarmingUserGuid = farming_effect_attribute.OwnerGuid; farming_summary.FarmingSummonType = farming_effect_attribute.FarmingSummonedEntityType; farming_summary.FarmingEntityGuid = farming_effect_attribute.FarmingEntityGuid; farming_summary.FarmingState = farming_effect_attribute.FarmingState; farming_summary.StartTime = farming_effect_attribute.FarmingStartTime.ToTimestamp(); farming_summary.EndTime = farming_effect_attribute.FarmingEndTime.ToTimestamp(); return farming_summary; } }