using ServerCommon; using ServerCore; using ServerBase; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace GameServer { internal class ItemFirstPurchaseHistoryAgentAction : EntityActionBase { ConcurrentDictionary m_item_first_purchase_histories = new(); public ItemFirstPurchaseHistoryAgentAction(Player owner) : base(owner) { } public override async Task onInit() { await Task.CompletedTask; var result = new Result(); return result; } public override void onClear() { m_item_first_purchase_histories.Clear(); } public List getItemFirstPurchaseHistories() { return m_item_first_purchase_histories.Select(x => x.Value).ToList(); } public bool isItemFirstPurchase(int itemMetaId) { return !m_item_first_purchase_histories.ContainsKey(itemMetaId); } public async Task tryAddItemFirstPurchaseHistoryFromDoc(ItemFirstPurchaseHistoryDoc itemFirstPurchaseHistoryDoc) { var result = new Result(); var err_msg = string.Empty; var player = getOwner() as Player; NullReferenceCheckHelper.throwIfNull(player, () => "player is null !!!"); ItemFirstPurchaseHistory item_first_purchase_history = new(player); await item_first_purchase_history.onInit(); var item_first_purchase_history_attribute = item_first_purchase_history.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(item_first_purchase_history_attribute, () => $"item_first_purchase_history_attribute is null !!! - {player.toBasicString()}"); if (!item_first_purchase_history_attribute.copyEntityAttributeFromDoc(itemFirstPurchaseHistoryDoc)) { err_msg = $"Failed to copyEntityAttributeFromDoc() !!! to:{item_first_purchase_history_attribute.getTypeName()}, from:{itemFirstPurchaseHistoryDoc.getTypeName()} : {this.getTypeName()}"; result.setFail(ServerErrorCode.DynamoDbDocCopyToEntityAttributeFailed, err_msg); Log.getLogger().error(result.toBasicString()); return result; } if (!m_item_first_purchase_histories.TryAdd((int)item_first_purchase_history_attribute.ItemMetaId, item_first_purchase_history)) { err_msg = $"Failed to TryAdd() !!! : {item_first_purchase_history.toBasicString()} : {this.getTypeName()}"; result.setFail(ServerErrorCode.ItemFirstPurchaseHistoryDocLoadDuplicatedItem, err_msg); Log.getLogger().error(result.toBasicString()); return result; } return result; } public async Task tryAddItemFirstPurchaseHistoryFromMetaId(int itemMetaId) { var result = new Result(); var err_msg = string.Empty; var player = getOwner() as Player; NullReferenceCheckHelper.throwIfNull(player, () => "player is null !!!"); if (!MetaData.Instance._ItemTable.TryGetValue(itemMetaId, out var itemMetaData)) { err_msg = $"Failed to TryGetValue() !!! : itemMetaId:{itemMetaId} : {this.getTypeName()}"; result.setFail(ServerErrorCode.ItemMetaDataNotFound, err_msg); Log.getLogger().error(result.toBasicString()); return result; } if (itemMetaData.Buy_Discount_Rate == 0) return result; ItemFirstPurchaseHistory item_first_purchase_history = new(player); await item_first_purchase_history.onInit(); var item_first_purchase_history_attribute = item_first_purchase_history.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(item_first_purchase_history_attribute, () => $"item_first_purchase_history_attribute is null !!! - {player.toBasicString()}"); item_first_purchase_history_attribute.ItemMetaId = (uint)itemMetaId; item_first_purchase_history_attribute.FirstPurchaseTime = DateTime.UtcNow; item_first_purchase_history_attribute.newEntityAttribute(); if (!m_item_first_purchase_histories.TryAdd((int)item_first_purchase_history_attribute.ItemMetaId, item_first_purchase_history)) { err_msg = $"Failed to TryAdd() !!! : {item_first_purchase_history.toBasicString()} : {this.getTypeName()}"; result.setFail(ServerErrorCode.ItemFirstPurchaseHistoryAlreadyExist, err_msg); Log.getLogger().error(result.toBasicString()); return result; } return result; } } }