106 lines
4.2 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|