Files
caliverse_server/GameServer/Contents/Mail/Helper/MailHelper.cs
2025-05-01 07:20:41 +09:00

106 lines
4.2 KiB
C#

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<ReceivedMailDoc?> 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<MailAttrib>();
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<MailAction>();
await mail_action.checkSystemMail();
}
}
}