using Pipelines.Sockets.Unofficial.Arenas; using ServerCommon; using ServerCore; using ServerBase; using USER_GUID = System.String; using MAIL_GUID = System.String; using GameServer.PacketHandler; using MetaAssets; namespace GameServer { public static class MailHelper { public static bool isDeletableMail(this MailAttribute mailAttribute) { var has_creatable_item = false; foreach (var mail_item in mailAttribute.ItemList) { var item_meta_id = mail_item.ItemId; if (false == MetaData.Instance._ItemTable.TryGetValue((Int32)item_meta_id, out var found_item_meta_data)) { var err_msg = $"Not found ItemMeta !!! : itemMetaId:{item_meta_id} - {mailAttribute.toBasicString()}"; Log.getLogger().error(err_msg); return false; } // 메타버스 서버에서 우편에 첨부 아이템이 생성 가능한 아이템이 존재할 경우 // 우편을 삭제할 수 없다 !!! if(true == found_item_meta_data.isCreatableItem()) { has_creatable_item = true; } } if ( mailAttribute.ItemList.Count > 0 && mailAttribute.IsGetItem == false && true == has_creatable_item ) { return false; } return true; } public static string makeMailGuid(DateTime now) { var guid = Guid.NewGuid().ToString("N"); return $"{now.ToString("yyyy/MM/dd/HH:mm:ss:ff")}-{guid}"; } public static void toAttrib(this MailAttribute mailAttribute, MailAttrib mailAttrib) { mailAttrib.MailGuid = mailAttribute.MailGuid; mailAttrib.IsRead = mailAttribute.IsRead; mailAttrib.IsGetItem = mailAttribute.IsGetItem; mailAttrib.IsSystemMail = mailAttribute.IsSystemMail; mailAttrib.SenderNickName = mailAttribute.SenderNickName; mailAttrib.SenderGuid = mailAttribute.SenderGuid; mailAttrib.ReceiverNickName = mailAttribute.ReceiverNickName; mailAttrib.ReceiverGuid = mailAttribute.ReceiverGuid; mailAttrib.Title = mailAttribute.Title; mailAttrib.Text = mailAttribute.Text; mailAttrib.CreateTime = mailAttribute.CreateTime; mailAttrib.ExpireTime = mailAttribute.ExpireTime; mailAttrib.ItemList = mailAttribute.ItemList; mailAttrib.ItemList = mailAttribute.ItemList.Select(x => new ServerCommon.MailItem() { ItemId = x.ItemId, Count = x.Count }).ToList(); } public static ReceivedMailDoc CreateReceivedMail(USER_GUID to_user_guid, MAIL_GUID mail_guid) { var ttlTime = MetaHelper.GameConfigMeta.UserMailStoragePeriod; var received_mail_doc = new ReceivedMailDoc(to_user_guid, mail_guid, ttlTime); return received_mail_doc; } public async static Task CreateReceivedMailBySendMail(USER_GUID to_user_guid, MAIL_GUID mail_guid, MailAttribute send_mail_attribute) { var ttlTime = DynamoDbClientHelper.makeTTLTimeForDynamoDB(send_mail_attribute.ExpireTime); //var ttlTime = MetaHelper.GameConfigMeta.UserMailStoragePeriod; var received_mail_doc = new ReceivedMailDoc(to_user_guid, mail_guid, ttlTime); var received_mail_attrib = received_mail_doc.getAttrib(); if (received_mail_attrib == null) { return null; } send_mail_attribute.toAttrib(received_mail_attrib); received_mail_attrib.ExpireTime = DateTimeHelper.Current.AddSeconds(MetaHelper.GameConfigMeta.UserMailStoragePeriod); var result = await received_mail_doc.newDoc4Query(); if (result.isFail()) { return null; } return received_mail_doc; } public async static Task loadSystemMail(this Player player, bool isFirstLogin) { var mail_action = player.getEntityAction(); await mail_action.checkSystemMail(); } } }